0

这是一个C++项目,它的lib依赖是

你好.exe
   -> A.so
   -> 巴
巴
  -> A.so

Hello.exe 依赖于 Ba 和 A.so,而 Ba 依赖于 A.so。GCC编译会链接Hello.exe成功吗?

而如果ba中有一个b.cc文件,其中包含了A.so的头文件ah,并且还使用了A.so的一些接口,那么通过正确的“include”路径设置,将b.cc编译为bo应该是成功的. 但是如果没有 A.so 作为输入,Ba 的链接就会失败,对吧?

gcc -c b.cc -I../A/include ;; 成功的

gcc -a 巴波 ;; 失败

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

谢谢。

4

1 回答 1

1

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

编译 Hello.exe 时需要指定 A.so 和 Ba 的链接依赖项

在我的脑海中,它会像

gcc -o Hello.exe B.a A.so

作为旁注,您应该将 A.so 重命名为 libA.so 而不是

gcc -o Hello.exe -lA B.a

像示例 1 一样直接链接到 A.so 将要求 A.so 始终与 Hello.exe 位于同一目录中

如果使用示例 2,则可以将 libA.so 放在任何位置并使用 LD_LIBRARY_PATH 指向正​​确的目录。

于 2009-12-17T05:44:28.603 回答