使用共享库的C++静态库链接。编译会很好?

问题描述:

这里是一个C++项目,将它的lib依赖是使用共享库的C++静态库链接。编译会很好?

 
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的头文件ah,并且还使用了A.so的一些接口,那么通过正确的“include”路径设置,将b.cc编译为博应该是成功的。 但是,如果没有A.so作为输入,B.a的链接将失败,对吧?

 
gcc -c b.cc -I../A/include ;; successful 

gcc -a B.a b.o    ;; fail 

我在哪里可以找到有关这些复杂的参照关系的细节库链接文件...

感谢。

+0

我发现你的问题的措辞很难遵循,我不确定你实际上在问什么。我认为英语不是你的母语,但你能否看看是否有另一种方式可以说出这种话? – 2009-12-17 05:36:16

静态库只是从编译的.c/.cpp文件创建的对象文件的集合。 它不能有链接关系。

您需要指定链接的依赖既A.so和Ba当编译HELLO.EXE

了我的头顶部它会像

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