2011-05-01 5 views
5

私が持っています。それは私のために良い小さなlibtest.soファイルを出力します。それをテストするために、私はそうのようなPythonスクリプトを持っている:libtest.soと同じディレクトリにこれを実行Boost.PythonとCMakeのリンクと読み込みエラーが

import libtest 

print(libtest.greeting()) 

は、次のエラーを与える:

Traceback (most recent call last): 
    File "test.py", line 1, in <module> 
    import libtest 
ImportError: /home/travis/projects/boost-python-test/build/libtest.so: undefined symbol: _ZNK5boost6python7objects21py_function_impl_base9max_arityEv 

む〜を!

/usr/bin/c++ -fPIC -shared -Wl,-soname,libtest.so -o libtest.so CMakeFiles/test.dir/main.cpp.o -L/usr/lib/libpython2.7.so 

私はそのライン上-L/usr/lib/libboost_python-mt-py27.aが表示されていない理由として、精神的なブロックを持っている:問題はmake VERBOSE=1とかなり明確である...私のlibtest.soを作成する行は次のようになります。それは明らかにfind_package(PythonLibs ...)のために働いた。私はいくつかのCMakeの新しさのために不足している。

答えて

8

これに対する解決方法は非常に簡単です。add_libraryステートメントの後にライブラリを明示的にライブラリにリンクする必要があります(target_link_libraries)。

target_link_libraries(test 
     ${Boost_LIBRARIES} 
     ${PYTHON_LIBRARIES} 
    ) 

私はまだそれがないとPythonのために働いた理由はまだ分かりません。マジック?

+0

あなた自身で見つけた後に回答を投稿してくれてありがとう、私の問題を解決しました。 –

関連する問題