使用共享库的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
我在哪里可以找到有关这些复杂的参照关系的细节库链接文件...
感谢。
答
静态库只是从编译的.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指向正确的目录。
我发现你的问题的措辞很难遵循,我不确定你实际上在问什么。我认为英语不是你的母语,但你能否看看是否有另一种方式可以说出这种话? – 2009-12-17 05:36:16