我問另外一個問題,這是一個直接的答案有點太複雜了,所以我煮下來到這個基本問題......cython - distutils vs cmake:與libpython鏈接?
當我建立使用標準用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
到。所以鏈接命令:
$ 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模塊爲什麼沒有被鏈接工作正常?如果是這樣的話,爲什麼我需要使用鏈接libpython的cmake構建,以及如何避免它,以便它可以與我的任何python2.7解釋器一起工作而不會崩潰?
目前我可以用正確的蟒蛇直接的cmake:CXX=g++ cmake -DPYTHON_LIBRARY=/path/to/another/Python
顯然,沒有直接鏈接到Python二進制文件的人可以工作,因爲動態鏈接器使用當前運行的Python連接符號(推測是好事)。不能說爲什麼cmake雖然拉動Python二進制文件;我從來沒有真正使用過cmake。 – torek 2013-03-23 09:55:03
準確地說,我想到了什麼,以及我想要的是哪種行爲。 cmake事情發生在發現python並添加它的模塊的某處。我只是想找到一個解決方案,以便不能鏈接到python: - / – jdi 2013-03-23 10:04:38