Tôi đang cố gắng xây dựng các ràng buộc python cho một thư viện mà tôi đã viết, và tôi đang gặp một số vấn đề khi nhận được cmake để hiểu rằng nó nên sử dụng boost-python thư viện cho python 3.liên kết cmake với libboost_python-py32.so thay vì libboost_python.so
Đây là tập tin cmake tôi:
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)
Và đây là lỗi mối liên kết mà tôi nhận được:
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'
Thay đổi thành 'find_package (PythonLibs 3 REQUIRED)' có hoạt động không? Bạn có lẽ nên xóa CMakeCache.txt của bạn trước khi thử. – Fraser
các builtin_converters.hpp: 122 lỗi biến mất, nhưng libboost_python.so: undefined tham chiếu đến 'PyString_Size 'vẫn còn đó. –
@Fraser: 'find_package (PythonLibs 3 REQUIRED)' sẽ không giúp bạn tìm thư viện Boost.Python tương ứng. Nó chỉ tìm các thư viện ngôn ngữ "cơ bản" của Python. –