c++ - 每个 undefined symbol 是否都与它来自的库名称相关联?

标签 c++ linux ubuntu g++ nm

假设 libA.so 依赖于 libB.so、libC.so、libD.so。 undefined symbol 和所需的库名称之间是否存在映射:

undefined_symbol_1 comes from libB.so
undefined_symbol_2 comes from libC.so
undefined_symbol_3 comes from libC.so
undefined_symbol_4 comes from libC.so
undefined_symbol_5 comes from libD.so

还是它们只是分开存放:

Undefined symbols: undefined_symbol_1, undefined_symbol_2, undefined_symbol_3, undefined_symbol_4, undefined_symbol_5;
Required libraries: "libB.so", "libC.so", "libD.so";

系统:ubuntu

工具:g++

最佳答案

Linux/elf 格式中没有这样的映射。未解析的符号和所需的库不相关。

事实上,您可以预加载(使用 LD_PRELOAD)另一个解析任何未解析符号的库。此方法通常用于将 libc malloc 和 friend 替换为另一个堆实现,而无需重新编译可执行文件。

解析符号时,运行时链接器按照加载的顺序遍历加载的可执行文件和库的列表,并选择第一个解析符号的。

推荐阅读:How to write shared libraries by Ulrich Drepper .

关于c++ - 每个 undefined symbol 是否都与它来自的库名称相关联?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53781204/

相关文章:

c++ - 在 C++ 代码中使用字符 `$` 或 `@` 有什么问题吗?

c++ - 内联函数中的静态变量

c++ - std::max_element 编译错误,C++

c++ - 动态数组成员变量

python - SSH 命令立即退出,而不是作为 python 子进程保持事件状态

linux - 在用户空间中实现 Linux 字符驱动程序

git - 恢复 Git 删除的文件(重置 --hard 删除的文件)

ubuntu - localhost/phpmyadmin 中的错误 #2002。在 Ubuntu 中使用 XAMPP

c++ - 将多行 shell 脚本转换为一行命令

linux - 如何低级调试卡住的 Ubuntu 内核?