私は標準cythonののdistutilsを使用して、私のaModule.so
を構築するとき、していないようです...cython - distutils vs cmake:libpythonとリンクしていますか?
を私は、この基本的な質問にそれを煮詰めてストレートな答えのために少しあまりにも複雑だった別の質問をしていましたlibpython
に対してリンク:
$ otool -L aModule.so
aModule.so:
/usr/local/lib/libboost_thread-mt.dylib (compatibility version 0.0.0, current version 0.0.0)
/usr/local/opt/thrift/lib/libthrift-0.9.0.dylib (compatibility version 0.0.0, current version 0.0.0)
/usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.9.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.11)
しかし、私はcmakeの設定でビルドするとき、それが.soのにlibpython
を連結するリンカーのコマンドを生成し続ける:
$ otool -L aModule.so
aModule.so:
/System/Library/Frameworks/Python.framework/Versions/2.7/Python (compatibility version 2.7.0, current version 2.7.1)
/usr/local/opt/thrift/lib/libthrift-0.9.0.dylib (compatibility version 0.0.0, current version 0.0.0)
/usr/local/lib/libboost_thread-mt.dylib (compatibility version 0.0.0, current version 0.0.0)
/usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 52.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.1.0)
distutilsによって生成されたモジュールは、私のpython2.7のインストール(システム、または私のプロジェクトのためのvirtualenv)でうまく動作しているようです。私が何かとそれをインポートしようとすると、cmakeはバージョンの不一致でクラッシュしますが、リンクされたシステムのPythonはそれとは異なります。
なぜdistutilsモジュールはリンクされずに正常に動作しますか?それが事実なら、なぜlibakethonをリンクするcmakeビルドを作成する必要がありますか?クラッシュなしでPython2.7インタプリタで動作するようにするには、どうすればそれを防ぐことができますか?
現在、私は右のpythonでcmakeのを指示することができます:CXX=g++ cmake -DPYTHON_LIBRARY=/path/to/another/Python
明らかに、Pythonバイナリに直接リンクされていないものは、ダイナミックリンカがシンボルを現在動作しているPython(おそらく良いこと)と結びつけるため動作します。なぜcmakeがPythonバイナリを引っ張っているのかは分かりません。私はcmakeを自分で使ったことは一度もありません。 – torek
まさに私が考えたことと、私が望むふるまいです。 cmakeのことは、Pythonを見つけて追加するモジュールのどこかで起こっています。私はちょうどPythonとリンクできないようにするための解決策を見つけたい: - / – jdi