C++ 符号表是否包含每个未定义符号的库名称?
假设我们有一个共享库libA,它依赖于另一个共享库libB。我们以这种方式构建libA:C++ 符号表是否包含每个未定义符号的库名称?,c++,gcc,g++,nm,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
$ 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
etc在ELF可执行文件中,它存储在可执行文件中的一个符号表中,是的(虽然不是函数名所在的符号表!这是
nm
将提供给您的)
可执行文件中有足够的信息告诉运行时链接器需要哪些动态库,以及在动态库中应该找到哪些符号
readelf
将告诉您更多信息
其他可执行格式将/必须有等效格式,但我无法告诉您有关它们的详细信息。谢谢。可执行文件是否只包含所需库的列表,或者是否存在从未定义符号到该符号所来自的库名称的映射?