【发布时间】:2015-01-22 11:50:18
【问题描述】:
我有一个必须构建的程序。该程序依赖于libA,而libA 依赖于libB。两个库都在同一个文件夹中,但ldd libA.so 不包括libB.so,所以我必须在链接时添加它。
这是我的gcc 命令:
gcc -L/path/to/libraries/lib -lA -lB -I/path/to/libraries/include main.cpp
程序构建并链接,但没有启动。它给了我以下错误:
./a.out:符号查找错误:/path/to/libraries/lib/libA.so:未定义符号:symbol_used_in_libA_but_defined_in_libB
使用ldd 我可以看到libB.so 不包含在我的二进制文件中:
linux-vdso.so.1 => (0x00007fffaecd9000)
libA.so => /path/to/libraries/lib/libA.so (0x00007effc02a4000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007effbfebb000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007effbfca5000)
/lib64/ld-linux-x86-64.so.2 (0x00007effc05cb000)
我有这些条件:
-
/path/to/libraries在里面LD_LIBRARY_PATH - 运行
ldconfig没问题,ldconfig -p找到libA.so和libB.so - 如果在 gcc 命令中我将
-lB更改为-lBB,它会给我一个链接器错误,所以我认为gcc可以正确找到libB.so,即使它没有在可执行文件中链接它。
我做错了什么?为了将可执行文件链接到这两个库,我可以做些什么?
【问题讨论】: