在 g++ 中与 .so 链接导致未定义的引用

Linking with .so in g++ results in undefined references

为简单起见...假设我有以下内容:A.lib、libB.so(使用 A.lib)和 C.exe(使用 libB.so).注意:这是 Linux,而不是 Windows。我只是使用 .exe 来传送二进制 type/purpose.

我只是想编译 link C.exe 形成命令提示符,因为它只是一个简单的测试程序。这是我正在使用的行:

g++ -I../include C.cpp -o C.exe -L../lib -lB

结果是对 A.lib 中可以找到的事物的许多未定义引用。没有引用从 libB.so.

导出的任何内容的错误

如果我将 libB.so 复制到同一目录并使用此命令:

g++ -I../include C.cpp -o C.exe -lB

结果是 C.exe 构建完成,可以 运行 没有错误。

一旦构建了 libB.so,我就不需要用于构建它的库。尽管如此,我想我会尝试一些作为最后的尝试。我将 A.lib 复制到与 libB.so 相同的 lib 目录中,然后再次尝试原始构建命令。结果还是一样。

感谢任何想法。

SamVershavchik 让我找到了答案。我首先尝试了这个命令:

g++ -I../include C.cpp -o C.exe -Wl,-R,../lib -lB

结果是一个干净的构建,但是当我 运行 C.exe.

时出现另一个关于丢失符号的错误

我修改了命令如下:

g++ -I../include C.cpp -o C.exe -Wl,-R,--just-symbols=../lib/libB.so -lB

这导致了干净的构建,并且能够 运行 C.exe 没有错误。