在 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 没有错误。
为简单起见...假设我有以下内容: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 没有错误。