这是一个C ++项目,它的lib依赖是
Hello.exe -> A.so -> B.a
B.a -> A.so
Hello.exe依赖于B.a和A.so,而B.a依赖于A.so. GCC编译器会成功链接Hello.exe吗?
如果Ba中有b.cc文件包含A.so的头文件啊,并且还使用了A.so的一些接口,那么使用右“include”路径设置,将b.cc编译为bo应该是成功的。 但如果没有A.so作为输入,那么B.a的链接就会失败,对吗?
gcc -c b.cc -I../A/include ;; successful gcc -a B.a b.o ;; fail
我可以在哪里找到有关这些复杂参考关系的详细库链接文档...
感谢。
答案 0 :(得分:1)
静态库只是从已编译的.c / .cpp文件创建的目标文件的集合。 它不能有链接关系。
编译Hello.exe
时,需要指定A.so和B.a的链接依赖关系从我的头顶开始就像是
gcc -o Hello.exe B.a A.so
作为旁注,您应该将A.so重命名为libA.so,而不是
gcc -o Hello.exe -lA B.a
直接链接到A.so就像示例1一样,要求A.so始终与Hello.exe位于同一目录中
如果您使用示例2,您可以将libA.so放在任何位置,并使用LD_LIBRARY_PATH指向正确的目录。