我已经构建了一个共享库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"时,可以成功构建。
但是我无法理解,为什么可以通过以下命令成功构建:
gcc test.c -o test -fPIC -I./ -L./ -lC -Wl,-rpath=.
答案 0 :(得分:0)
我认为您的libA.so和libB.so存在于当前目录中。 您提供链接选项-Wl -rpath作为当前目录。 因此,您的链接器将获取当前目录中的库并链接符号。
由于您指定的链接器选项,它没有给出任何错误。
您可能会得到的下一个疑问是, 我只指定了要搜索的目录,但没有指定指定的库。 链接器如何使用libA.so和libB.so库? 但链接器是智能的,并且它认为您忘记包含这些相互依赖的库(您可能不了解相互依赖性),但您已指定搜索所有依赖库的路径。所以它选择了相互依赖的库。
我认为它仅适用于相互依赖。应该使用-l选项指定所有直接库。