1. 背景
werflychen在其文章动态链接库链接参数不要写成静态链接形式说明了使用全路径方式链接动态库带来的潜在问题,但对其产生的原因讲的太笼统。这里就两种方式的链接结果做简单分析。
2. 示例代码目录结构
示例代码目录结构如下。foo目录用户生成动态库,最终生成动态库libfoo.so
。fullpath_link.cpp引用了libfoo.so中的代码。
├── foo
│ ├── Foo.cpp
│ ├── Foo.h
│ └── makefile
├── fullpath_link.cpp
└── makefile
3. 使用相对路径方式链接libfoo.so
3.1 链接参数
makefile 内容如下
target = fullpath_link
CXXFLAGS += -I./foo
fullpath_link: fullpath_link.o foo/libfoo.so
g++ -o $@ $^
clean:
rm -f *.o $(target)
3.2 ELF文件内容
链接后,使用readelf来分析最终的可执行文件,结果如下:
[james@jamescentos7 fullpath_l