2013-03-03 7 views
8

私が書いたライブラリ用の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' 
+0

'find_package(PythonLibs 3 REQUIRED)'への変更はできますか?試してみる前にCMakeCache.txtを削除してください。 – Fraser

+0

builtin_converters.hpp:122エラーは消えましたが、libboost_python.so:未定義のPyString_Sizeへの参照はまだそこにあります。 –

+0

@Fraser: 'find_package(PythonLibs 3 REQUIRED)'は、対応するBoost.Pythonライブラリを見つけるのに役立ちません。これは、Pythonの "基本的な"言語ライブラリのみを検索します。 –

答えて

5

これはトリックを行う可能性があります。

set(Python_ADDITIONAL_VERSIONS 3.2) 

find_package(Boost COMPONENTS system thread python-py32 REQUIRED) 
+1

Ubuntuでしかし、MacのソースからBoostをコンパイルすると、ライブラリは単に 'libboost_python3'と呼ばれます。他のLinuxディストリビューション(Fedoraなど)でも発生する可能性があります。 –

+0

@ user465139あなたはそれをどこに設定しますか? – blanche

関連する問題