我有一个必须构建的程序。该程序依赖于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
我做错了什么?为了将可执行文件链接到两个库,我能做些什么?