首页 > 解决方案 > cmake rpath没有加载所有库

问题描述

我正在编写一个使用 cmake 完成构建的程序。在 cmake 文件中,我将 rpath 设置为指向我使用的共享库的目录。我还在 $HOME/.local/vtk-v8.2.0/lib 中安装了一些其他库,例如 vtk

if( ${APPLE} )
    set(CMAKE_MACOSX_RPATH ON)
endif()

SET(CMAKE_SKIP_BUILD_RPATH  FALSE)
SET(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)

SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")

SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)

LIST(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_PREFIX}/lib" isSystemDir)
IF("${isSystemDir}" STREQUAL "-1")
    SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${libDir}")
ENDIF("${isSystemDir}" STREQUAL "-1")

rpath 设置正确

$ readelf -d ./myExec.so | rg RUNPATH  
$    0x000000000000001d (RUNPATH)            Library runpath: [/home/ashkan/myExec/install/lib:/home/ashkan/.local/vtk-v8.2.0/lib]

但是当我检查我的可执行文件时,它没有找到所有的共享库。

$ ldd ./myExec | egrep 'vtk'
$         libvtkCommonMath-8.2.so.1 => /home/ashkan/.local/vtk-v8.2.0/lib/libvtkCommonMath-8.2.so.1 (0x00007f2bcf28d000)
          libvtkCommonCore-8.2.so.1 => /home/ashkan/.local/vtk-v8.2.0/lib/libvtkCommonCore-8.2.so.1 (0x00007f2bcee4c000)
          libvtksys-8.2.so.1 => not found

我也检查过,显示“未找到”的共享库实际上与其他共享库位于同一目录中。

任何想法为什么会这样?

标签: cmakeshared-librariesld

解决方案


推荐阅读