c++ - 获取导致 g++ 中链接器错误的文件

标签 c++ linker g++

我正在构建一个二进制文件,它使用多个编译为 .so 文件的组件。我收到一系列链接器错误,这些错误指向哪个 .so 文件导致了这些错误,但是我可以获得有关哪些文件正在调用未定义函数的信息,或者是否可能获取有关调用未定义函数的源代码位置的信息?我发现寻找函数 esp 太乏味了,因为使用了很多重载和模板(这意味着在很多地方都有相同的名称)。在 Windows 中,它显示哪个 .o 文件导致了 undefined symbol ,但我陷入了 Linux 中的库级别。我在linux下使用g++。任何指针都会有用。

最佳答案

您询问“共享库中的哪个对象文件导致了错误”。

问题是,当共享库被链接时,所有目标文件都已“融合在一起”,并且不再作为单独的实体存在于共享库中,因此您的问题有些毫无意义。

也就是说,如果您进行调试构建(使用 -g 标志),链接器会告诉您哪个文件和行导致了问题,您可以然后也许能够翻译成目标文件。

如果不能(例如,因为头文件中引用了问题符号),您可以向链接器寻求帮助:再次重建库,传递链接器 -y 标志:

g++ -fPIC -shared ${OBJECTS} -o foo.so -Wl,-y,my_unresolved_symbol

会告诉您哪个对象引用了my_unresolved_symbol

注意:链接器在 C++ 的“下方”运行,因此您必须传递损坏的名称,例如_Znw 到它。

关于c++ - 获取导致 g++ 中链接器错误的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5307848/

相关文章:

c++ - 静态数据成员初始化

c++ - 在 NodeJS 与 OpenSSL C++ 中加密时获取不同的值

c++ - 如何使用循环从 TEdit 中逐个获取文本

c++ - cmake 和 libcxx 的链接器错误

c - libc.so 在一个进程中映射了四个段,为什么?

c++ - 循环写入优化

c++ - cbegin函数的返回值

c++ - 如果基类指针不能访问派生类成员函数,那多态有什么方便的?

c++ - 使用 Code::Blocks 在 C++ 中编译 Glew 和 SDL

c++ - '变量名'不能出现在常量表达式c++中