共享库未列出特定的共享库依赖项

时间:2019-08-17 20:44:47

标签: cmake

在我的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

那为什么只有一些依赖才能通过呢?

0 个答案:

没有答案