我正在使用 Boost.Python 在 C++ 中编写 Python 扩展模块。但是,我想使用比系统安装提供的更新版本的 Boost 库。这个较新版本的 boost 包含在
BOOST_ROOT=$HOME/opt/boost/1.55.0
.
按照这篇关于如何在 CMake 中使用 RPath 的指南,我想出了以下内容CMakeLists.txt
。
cmake_minimum_required(VERSION 2.8)
project("test")
set(PROJECT_DESC "Test Boost.Python")
set(CMAKE_SKIP_BUILD_RPATH FALSE)
set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
add_definitions(-std=c++11 -Wall -Wextra -pedantic)
find_package(PythonInterp REQUIRED)
find_package(PythonLibsNew REQUIRED)
find_package(Boost COMPONENTS python REQUIRED)
message(STATUS "Using Boost installation in:")
message(STATUS " INCLUDE: ${Boost_INCLUDE_DIRS}")
message(STATUS " LIB: ${Boost_LIBRARIES}")
include_directories(
${PROJECT_SOURCE_DIR}
${PYTHON_INCLUDE_DIRS}
${Boost_INCLUDE_DIRS}
)
macro(add_python_module _name _srccpp)
PYTHON_ADD_MODULE(${_name} ${_srccpp})
target_link_libraries(${_name} ${Boost_LIBRARIES})
endmacro()
add_python_module(ownership ownership.cpp)
然后我运行以下命令来构建模块
mkdir build; cd build
cmake -DCMAKE_INSTALL_PATH="$BOOST_ROOT/lib" ..
make
运行后的状态消息cmake
指向正确的 boost 安装。(CMake boost 模块获取环境变量
$BOOST_ROOT
)即 CMake 变量Boost_LIBARIES
指向
$BOOST_ROOT/lib/libboost_python.so
.
但是,如果我检查实际会使用哪些库,则会列出系统库:
$ ldd ownership.so
# ...
libboost_python.so.1.53.0 => /usr/lib64/libboost_python.so.1.53.0 (0x00007f09abfc1000)
# ...
这是 1.53 版,尽管上面的状态消息明确指向 1.55。
我究竟做错了什么?我怎样才能让 ldd 选择图书馆
$BOOST_ROOT/lib/libboost_python.so.1.55.0
?