为了保持这个简单...假设我有以下内容: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目录中,并再次尝试了原始的构建命令。结果是一样的。
任何和所有的想法都赞赏。
答案 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的能力。