我构建了一个共享库libC.so,它依赖于libA.so和libB.so。然后我通过下面的命令使用libC.so构建test.c:
gcc test.c -o test -fPIC -I./ -L./ -lC它将输出错误,找不到libA.so和libB.so中的一些符号。我知道,当我添加"-lA -lB“标志时,tt可以成功构建。
但是我不明白,为什么它可以通过下面的命令成功构建:
gcc test.c -o test -fPIC -I./ -L./ -lC -Wl,-rpath=.发布于 2014-05-08 19:48:29
我认为您的libA.so和libB.so存在于当前目录中。您提供了链接选项-Wl -rpath作为当前目录。因此,您的链接器获取当前目录中的库并链接符号。
由于您指定的链接器选项,它不会给出任何错误。
您可能会得到的下一个疑问是,我只指定了要搜索的目录,而没有指定库。链接器是如何使用libA.so和libB.so库的呢?但是链接器是智能的,它认为您忘记了包含这些相互依赖的库(您可能不知道什么是相互依赖),但是您已经指定了搜索所有依赖库的路径。所以它选择了相互依赖的库。
我认为它只适用于相互依赖。我认为所有的直接库都应该用-l选项来指定。
https://stackoverflow.com/questions/23288729
复制相似问题