c++ - 在 g++ 中与 .so 链接导致 undefined reference

标签 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 中可以找到的东西的许多 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/

相关文章:

c++ - 如何在 OpenGL 中使用 SDL2 软件渲染?

c++ - 程序在索引超出范围时终止

c++ - Xlib 测试窗口名称

ruby - nohup 下奇怪的 Ruby 输出滞后?

arrays - 从 perl 中的其他数组中 grep 一个数组

c++ - g++,基于范围和向量化

python - 导入错误 : undefined symbol when importing swigged c++-class in python

c# - 在 C# 中包装 Visual C++

c++ - 获取程序中的当前优化级别

c - 为什么 printf 语句被执行了不止一次?