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

时间:2016-11-29 13:21:12

标签: c++ linux g++ shared-libraries

为了保持这个简单...假设我有以下内容: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中找到的东西。引用从libB.so导出的任何内容都没有错误。

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

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

结果是构建了C.exe并且可以无误地运行。

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

任何和所有的想法都赞赏。

1 个答案:

答案 0 :(得分:0)

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的能力。