g++ 如何链接所需的库?
How g++ links in required libraries?
让我们考虑依赖于 libB.so、libC.so、libD.so:
的构建 libA.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";
库中包含未定义的符号及其来源的库信息。
您可以通过多种方式列出信息。一种方法是 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
.
让我们考虑依赖于 libB.so、libC.so、libD.so:
的构建 libA.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";
库中包含未定义的符号及其来源的库信息。
您可以通过多种方式列出信息。一种方法是 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
.