符号表是否包含每个未定义符号的库名?

时间:2018-12-14 11:34:24

标签: c++ gcc g++ nm

假设我们有一个共享库libA,它依赖于另一个共享库libB。我们通过以下方式构建libA:

$ g++ -I/header/files/of/libB -lB libA.cpp -o libA.so

libB导出的符号存储在libA的符号表中。但是库名“ libB.so”存储在哪里?它也存储在符号表中吗?是否可以为libA的每个未定义符号看到各自的库名(例如,使用nm工具)?

如果libA依赖于libB,libC,libD,我想看到这样的内容:

undefined_symbol_1 - libB.so
undefined_symbol_2 - libC.so
undefined_symbol_3 - libD.so

1 个答案:

答案 0 :(得分:2)

在ELF可执行文件中,它存储在可执行文件的 a 符号表中,是的(尽管函数名所在的符号表并不相同!<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/he@1.2.0/he.min.js"></script> <div id="app"> <input :value="decode(name)" @input="encode($event.target.value)" /> <p>{{ name }}</p> </div>会为您提供)。

可执行文件中有足够的信息,可以告诉运行时链接程序需要哪些动态库,以及期望在动态库中找到哪些符号。

nm将告诉您更多信息。

/将与其他可执行文件格式等效,但我无法告诉您有关它们的详细信息。