私は別の質問をしましたが、それは少し複雑すぎて簡単に答えることができなかったので、この基本的な質問に要約しました...
標準のcython distutilsを使用してビルドするaModule.so
と、リンクされていないようです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 セットアップでビルドするとlibpython
、 .soにリンクするリンカー コマンドが生成され続けます。
$ 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) のいずれでも問題なく動作するようです。一方、リンクされたシステムpython以外でインポートしようとすると、バージョンの不一致でcmakeがクラッシュします。
distutils モジュールがリンクされていなくても正常に動作するのはなぜですか? その場合、cmake ビルドで libpython をリンクする必要があるのはなぜですか? その場合、どの python2.7 インタープリターでもクラッシュせずに動作するようにするにはどうすればよいでしょうか?
現在、次のコマンドを使用して、適切な python に cmake を向けることができます。CXX=g++ cmake -DPYTHON_LIBRARY=/path/to/another/Python