链接动态库时,使用全路径形式与使用-L -l形式到底有什么区别?

本文详细分析了在链接动态库时,使用全路径形式和使用-L -l形式的差异。全路径方式会在ELF文件中写入库的完整路径,限制了可执行文件的移动;而-L -l方式仅记录库文件名,依赖于系统目录或LD_LIBRARY_PATH。通过示例代码、链接参数和执行方式,阐述了两种方法的影响及解决办法。
摘要由CSDN通过智能技术生成

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
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值