与.so在G 中的链接导致未定义的参考

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

本文关键字:未定义 参考 链接 so      更新时间:2023-10-16

保持此简单...假设我有以下内容: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构建,我不需要用来构建它的Libs。尽管如此,我认为我会尝试一些尝试作为最后的尝试。我将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而不会出错的能力。