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