为简单起见...假设我有以下文件:A.lib、libB.so(使用 A.lib)和 C.exe(使用 libB.so)。注意:这是 Linux,不是 Windows。我只是使用 .exe 来传达二进制类型/目的。
我只是尝试从命令提示符编译和链接 C.exe,因为它只是一个简单的测试程序。这是我正在使用的行:
g++ -I../include C.cpp -o C.exe -L../lib -lB
结果是对 A.lib 中可以找到的东西的许多 undefined reference 。没有引用从 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 的能力。
关于c++ - 在 g++ 中与 .so 链接导致 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40866987/