在我的CMakeLists.txt文件中使用target_link_libraries导致在构建库中仅设置了某些共享库依赖关系。
在我的CMakeLists.txt文件中,我有以下内容:
set(STIREN_LIBS)
list(APPEND STIREN_LIBS
/usr/lib/x86_64-linux-gnu/libcairo.so
/usr/lib/x86_64-linux-gnu/libboost_filesystem.so
/usr/lib/x86_64-linux-gnu/libboost_regex.so
/usr/lib/x86_64-linux-gnu/libicuuc.so
/usr/lib/x86_64-linux-gnu/libproj.so.12
/usr/lib/x86_64-linux-gnu/libharfbuzz.so
/usr/lib/x86_64-linux-gnu/libxml2.so
)
如果我对此调用target_link_libraries,则如下:
target_link_libraries(${PROJECT_NAME} PRIVATE ${STIREN_LIBS})
我是objdump -p
的结果Dynamic Section:
NEEDED libcairo.so.2
NEEDED libboost_filesystem.so.1.65.1
NEEDED libboost_regex.so.1.65.1
NEEDED libproj.so.12
NEEDED libxml2.so.2
NEEDED libstdc++.so.6
NEEDED libm.so.6
NEEDED libgcc_s.so.1
NEEDED libc.so.6
NEEDED ld-linux-x86-64.so.2
SONAME libstiren.so
它缺少libicuuc和lifharfbuzz的依赖项。我确认这些文件路径是有效的。
如果我省略了target_link_libraries,我会在objdump -p的输出中得到它
Dynamic Section:
NEEDED libstdc++.so.6
NEEDED libm.so.6
NEEDED libgcc_s.so.1
NEEDED libc.so.6
NEEDED ld-linux-x86-64.so.2
SONAME libstiren.so
那为什么只有一些依赖才能通过呢?