【问题标题】:cmake link with libboost_python-py32.so instead of libboost_python.socmake 与 libboost_python-py32.so 链接而不是 libboost_python.so
【发布时间】:2013-02-17 18:51:24
【问题描述】:

我正在尝试为我编写的库构建 python 绑定,但我无法让 cmake 理解它应该为 python 3 使用 boost-python 库。

这是我的 cmake 文件:

cmake_minimum_required(VERSION 2.8)

FIND_PACKAGE(Boost COMPONENTS
                system
                thread
                python REQUIRED)
find_package(PythonLibs REQUIRED)

INCLUDE_DIRECTORIES(${PYTHON_LIBRARIES})
INCLUDE_DIRECTORIES(${PYTHON_INCLUDE_DIRS})
INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIRS})

ADD_LIBRARY(
  pschulze SHARED
  src/candidate_relation.cpp
  src/schulze.cpp
  src/calculate.cpp
  src/candidate.cpp
  src/ranking.cpp
  src/userinput.cpp
  python.cpp)

TARGET_LINK_LIBRARIES(pschulze ${Boost_LIBRARIES} ${PYTHON_LIBRARIES})

ADD_EXECUTABLE(
  schulze
  src/candidate_relation.cpp
  src/schulze.cpp
  src/calculate.cpp
  src/candidate.cpp
  src/ranking.cpp
  src/userinput.cpp
  src/json-spirit/json_spirit_reader.cpp
  src/json-spirit/json_spirit_value.cpp
  main.cpp)

TARGET_LINK_LIBRARIES(schulze ${Boost_LIBRARIES} ${PYTHON_LIBRARIES})

ADD_DEFINITIONS(-std=gnu++0x -Os)

add_subdirectory (tests)

set(CMAKE_BUILD_TYPE Debug)

这是我得到的链接器错误:

Linking CXX executable schulze
CMakeFiles/schulze.dir/src/schulze.cpp.o: In function `arg_to_python':
/usr/include/boost/python/converter/builtin_converters.hpp:122: undefined reference to `PyInt_FromLong'
/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../lib/libboost_python.so: undefined reference to `PyString_Size'

【问题讨论】:

  • 更改为find_package(PythonLibs 3 REQUIRED) 有效吗?您应该在尝试之前删除您的 CMakeCache.txt。
  • builtin_converters.hpp:122 错误消失了,但 libboost_python.so: undefined reference to `PyString_Size' 仍然存在。
  • @Fraser: find_package(PythonLibs 3 REQUIRED) 不会帮你找到对应的 Boost.Python 库。它只查找 Python“基本”语言库。

标签: c++ python boost cmake


【解决方案1】:

这可能会奏效:

set(Python_ADDITIONAL_VERSIONS 3.2)

find_package(Boost COMPONENTS system thread python-py32 REQUIRED)

【讨论】:

  • 这可能有效,例如在 Ubuntu 上。但是,如果您在 Mac 上从源代码编译 Boost,则该库仅称为 libboost_python3。也可能发生在其他 Linux 发行版(例如 Fedora)上。
  • @user465139 你会在哪里设置?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-16
  • 1970-01-01
相关资源
最近更新 更多