私が書いたライブラリ用のPythonバインディングをビルドしようとしていますが、私はそれがboost-pythonを使うべきであることを理解するためにいくつかの問題を抱えていますここでのpython 3.cmake link with libboost_python-py32.so libboost_python.soの代わりに
ためのライブラリは私の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を削除してください。 – Fraser
builtin_converters.hpp:122エラーは消えましたが、libboost_python.so:未定義のPyString_Sizeへの参照はまだそこにあります。 –
@Fraser: 'find_package(PythonLibs 3 REQUIRED)'は、対応するBoost.Pythonライブラリを見つけるのに役立ちません。これは、Pythonの "基本的な"言語ライブラリのみを検索します。 –