C ++静态库链接与共享库。编译会没事的?

时间:2009-12-17 05:30:49

标签: c++ linux gnu

这是一个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

我可以在哪里找到有关这些复杂参考关系的详细库链接文档...

感谢。

1 个答案:

答案 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指向正确的目录。