这是BUG还是使用的问题?-Wl,-rpath 选项失效

C、C++和Java语言
回复
aaadddzxc
帖子: 139
注册时间: 2011-04-30 23:10
送出感谢: 0
接收感谢: 0

这是BUG还是使用的问题?-Wl,-rpath 选项失效

#1

帖子 aaadddzxc » 2018-01-08 13:26

有一个程序,他依赖几个共享库,这些共享库没有放在系统目录下,而是在这个程序的目录下。比如下面这样
LOADSO = -Wl,-rpath=./1/:./2/:./3/:./4/:./5/:./6/:./7

这个选项吧SO的库全部放都包含进来了,我检查过了,那些共享库的目录和名字都没问题。
为什么我用ldd查看会提示NOTFOUND?

同样的编译脚本我用CENTOS7 编译出来是正确的。
ubuntu 好像失效了一样 这个选项,我测试了下 ,比如 a.so b.so c.so 三个so a依赖b 这个时候b.so 就会提示notfound
但是我如果在我程序里面调用b.so 的随便一个函数,就正确了。。怎么会这样。。如果我不调用这个so的函数就会提示notfound。。。。
头像
astolia
论坛版主
帖子: 3282
注册时间: 2008-09-18 13:11
送出感谢: 1 次
接收感谢: 550 次

Re: 这是BUG还是使用的问题?-Wl,-rpath 选项失效

#2

帖子 astolia » 2018-01-10 20:36

在18.04下试了下,没问题啊。
a.c里有foo(),b.c里有bar(),bar()会调用foo(),分别编译成liba.so和libb.so,放到/tmp/1和/tmp/2下
main()里执行bar(),编译用
gcc -L/tmp/2 -L/tmp/1 -o main -Wl,-rpath=./1/:./2/ main.c -lb -la
在/tmp下ldd的结果
linux-vdso.so.1 => (0x00007ffd819e5000)
libb.so => ./2/libb.so (0x00007f0e5e96c000)
liba.so => ./1/liba.so (0x00007f0e5e76a000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f0e5e38a000)
/lib64/ld-linux-x86-64.so.2 (0x00007f0e5ed70000)
aaadddzxc
帖子: 139
注册时间: 2011-04-30 23:10
送出感谢: 0
接收感谢: 0

Re: 这是BUG还是使用的问题?-Wl,-rpath 选项失效

#3

帖子 aaadddzxc » 2018-01-13 11:07

。。。哦 不好意思 没写版本 是17.04会出这个问题
我现在用回16.04 了 正常了,其他版本系统没试过。。
回复

回到 “C/C++/Java”