5
我使用swig從C++文件構建python模塊,並且在OSX 10.8的主目錄中還有一個本地版本的python 2.7。我想用我的本地python構建,但是osx有一個系統python,這會導致一些麻煩。我收到以下錯誤將鏈接鏈接到OSX Lion上的特定python庫
>>> import example
Fatal Python error: PyThreadState_Get: no current thread
Abort trap: 6
它根據瀏覽四周,這是由於我的蟒蛇執行,但模塊鏈接兌制蟒蛇。
我部署一個小痛飲例如,as from tutorial,然後鏈接如下
gcc -shared -I builddir/include/python2.7/ example.c example_wrap.c \
-o _example.so -L builddir/lib/python2.7/ -lpython2.7
果然,_example.so保持對系統蟒蛇結合,可能是因爲框架是第一位的分辨率,雖然我我不確定這是在鏈接時還是在執行時。
_example.so:
_example.so (compatibility version 0.0.0, current version 0.0.0)
/System/Library/Frameworks/Python.framework/Versions/2.7/Python (compatibility version 2.7.0, current version 2.7.2)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0)
我該如何強制它綁定到我自己的python庫?
編輯:我成功地設法使它通過做
install_name_tool -change
/System/Library/Frameworks/Python.framework/Versions/2.7/Python
@executable_path/../lib/libpython2.7.dylib
進口,但它的感覺就像一個黑客攻擊。我能不能讓鏈接器爲我找到庫並在其中添加適當的參考?我不能只是指定庫名(libpython2.7.dylib),並讓它在運行時解決,因爲它發生在Linux?
由於沒有ldconfig等同於dyld(或者爲系統添加任意新路徑來爲dyld'拾取'新庫的能力 - 我敢打賭,install_name_tool事情可能是最接近你的解決方案,不會(1)安裝到系統庫路徑(/ lib,/ usr/lib)或DYLD_ *環境變量。另一個解決方案是鏈接到一個靜態Python庫(.a) – synthesizerpatel
最近有一個簡單的問題在virtualenv中使用了cython擴展,它曾經在(osx 10.7)之前工作,不知道是什麼改變了,因此想知道權威答案。PS我已經看到了一個hack解決方案,目標'.dylib'被重命名,正確的版本可能會鏈接到... –
我打算建議在virtualenv中嘗試這個,但有趣的是@qarma在那裏有類似的問題。 – cm2