让我们考虑构建libA.so的常用命令,该命令取决于libB.so,libC.so,libD.so:
$g++ -shared -L/path/to/libB -L/path/to/libC -L/path/to/libD
-lB -lC -lD
-I/path/to/headers
libA.cpp -o libA.so
未定义符号和所需的库名称之间是否存在映射:
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_symbol_1,undefined_symbol_2,undefined_symbol_3,undefined_symbol_4,undefined_symbol_5; 所需的库:“ libB.so”,“ libC.so”,“ libD.so”;
答案 0 :(得分:0)
该库包含未定义的符号和它们来自的库信息。
您可以通过多种方式列出信息。一种方法是objdump。
例如,看说libcurl动态符号:
> objdump -T /usr/lib/x86_64-linux-gnu/libcurl.so
0000000000000000 DF *UND* 0000000000000000 GLIBC_2.2.5 pthread_detach
0000000000000000 DF *UND* 0000000000000000 NETTLE_6 nettle_md4_init
.
.
版本信息中定义了诸如GLIBC_2.2.5之类的名称,该名称可以在运行中看到
> objdump -x /usr/lib/x86_64-linux-gnu/libcurl.so
.
.
Version References:
.
required from libnettle.so.6:
0x0a991006 0x00 06 NETTLE_6
required from libc.so.6:
0x09691a75 0x00 05 GLIBC_2.2.5
.