共享库依赖的CMAKE RPATH问题

时间:2019-09-30 15:21:05

标签: c++ cmake

我正在CMake项目中建立2个目标:libA.so和libB.so。 B取决于A(B-> A)。

目标 A 的声明:

file(GLOB SOURCES "*.cpp")
add_library(A SHARED ${SOURCES})

target_include_directories(A PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src/> 
                                                    $<INSTALL_INTERFACE:src/>)
#
# Installation
set(PACKAGE_NAME A)
set(PACKAGE_VERSION 1.0)

install(TARGETS ${PACKAGE_NAME} EXPORT ${PACKAGE_NAME}Targets
  ARCHIVE DESTINATION lib/${PACKAGE_NAME}-${PACKAGE_VERSION}
  LIBRARY DESTINATION lib/${PACKAGE_NAME}-${PACKAGE_VERSION}
  INCLUDES DESTINATION include/${PACKAGE_NAME}-${PACKAGE_VERSION}
export(EXPORT ${PACKAGE_NAME}Targets
  FILE "${CMAKE_CURRENT_BINARY_DIR}/${PACKAGE_NAME}-${PACKAGE_VERSION}/${PACKAGE_NAME}Targets.cmake"
)

目标 B 的声明:

add_library(B SHARED b.cpp)
target_include_directories(B PRIVATE 
                                $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}> 
                                $<INSTALL_INTERFACE:> )
target_link_libraries(B PUBLIC A)
#
# Installation
install(TARGETS B LIBRARY DESTINATION lib/B-1.0)

现在这在代码库中很好用,B拥有通往A的正确路径:

  

ldd /home/user/dev/source_code/lib/libB.so

...
libA.so.1.0 => /home/user/dev/source_code/lib/libA.so.1.0 (0x0000007f7fe40000)
...

现在要对系统进行安装:

  

sudo make install

它们安装到:

/usr/local/lib/A-1.0/libA.so.1.0
/usr/local/lib/B-1.0/libB.so

现在再次测试

  

ldd /usr/local/lib/B-1.0/libB.so

...
libA.so.1.0 => not found
...

在安装后似乎没有为 B 正确设置RPATH? CMake为什么不找出通往已知目标 A 的正确路径?

0 个答案:

没有答案
相关问题