linux下应用程序依赖的动态库另有依赖动态库时,该程序该如何编译?

假设程序test依赖动态库b,而动态库b依赖动态库a。

在编译test的时候,我们希望的是只指定b,而不用指定a,因为我们不希望知道a的依赖库有哪些,只需关心b。那么我们采用这样的思路去编译test的时候,是会报错的。比如:

我们编译动态库a:gcc a.c -o liba.so -shared -fPIC

我们编译动态库b:gcc b.c -o libb.so -shared -fPIC -I../a/ -L../a/ -la

我们编译test:gcc main.c -o test -I../b -L../b -lb

程序会报错如下:

/usr/bin/ld: warning: liba.so, needed by ../b/libb.so, not found (try using -rpath or -rpath-link)
../b/libb.so: undefined reference to `a'
collect2: ld returned 1 exit status

错误的原因在于程序没能自动找到liba.so,因为liba.so不在ld的默认搜索路径里。解决方法是如下编译:

gcc main.c -o test -I../b -L../b -lb -Wl,-rpath=../a

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值