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