2010-03-21 39 views
7

试图从当前'。'加载共享lib。 dir在osx上进行单元测试。如何使osx上的python加载dylib

在Linux和NetBSD什么工作是有符号链接_mymodule.so --> ../.libs/libmymodule.so

但在OSX,python的import mymodule不会找到

_mymodule.dylib --> ../.libs/libmymodule.dylib 

我已经尝试添加

export DYLD_LIBRARY_PATH=.:$DYLD_LIBRARY_PATH 

到脚本env,nogo。任何帮助赞赏。

-Ed

更新4/6/10:

解决了从下面krunk的信息。但只是复制或者将dylib复制到.so这个名字并没有完全解决它。仍然不会加载。但是告诉libtool链接lib和-module标志创建了一个可以加载的.so库。现在,lib的Python版本可以工作。

现在,如果我可以只是让Perl的lib工作。我正在构建swig perl,python,ruby和lua库,而这个修复只能让python和lua工作。

回答

12

只需使用* .so作为OS X中的模块扩展。我有一个模糊的记忆,无法加载.dylib的,它变成了python本身的问题。 。 。但我现在找不到邮件列表。

但是,请放心,您甚至可以在OS X上使用* .so来遵循标准惯例。整个框架中唯一的* .dylib是libsvn_swig。

find /System/Library/Frameworks/Python.framework/Versions/2.6/ -name "*.so" 

/System/Library/Frameworks/Python.framework/Versions/2.6//Extras/X11/xcb/xcb.0.0.0.so 
/System/Library/Frameworks/Python.framework/Versions/2.6//Extras/X11/xcb/xcb.0.so 
/System/Library/Frameworks/Python.framework/Versions/2.6//Extras/X11/xcb/xcb.so 
/System/Library/Frameworks/Python.framework/Versions/2.6//Extras/lib/python/CoreGraphics/_CoreGraphics.so 
/System/Library/Frameworks/Python.framework/Versions/2.6//Extras/lib/python/OpenSSL/SSL.so 
/System/Library/Frameworks/Python.framework/Versions/2.6//Extras/lib/python/OpenSSL/crypto.so 
/System/Library/Frameworks/Python.framework/Versions/2.6//Extras/lib/python/OpenSSL/rand.so 
/System/Library/Frameworks/Python.framework/Versions/2.6//Extras/lib/python/PyObjC/AppKit/_appmain.so 
/System/Library/Frameworks/Python.framework/Versions/2.6//Extras/lib/python/PyObjC/AppKit/_carbon.so 
/System/Library/Frameworks/Python.framework/Versions/2.6//Extras/lib/python/PyObjC/AppKit/_inlines.so 
/System/Library/Frameworks/Python.framework/Versions/2.6//Extras/lib/python/PyObjC/AppKit/_nsbezierpath.so 
/System/Library/Frameworks/Python.framework/Versions/2.6//Extras/lib/python/PyObjC/AppKit/_nsbitmap.so 
/System/Library/Frameworks/Python.framework/Versions/2.6//Extras/lib/python/PyObjC/AppKit/_nsfont.so 
/System/Library/Frameworks/Python.framework/Versions/2.6//Extras/lib/python/PyObjC/AppKit/_nsquickdrawview.so 
/System/Library/Frameworks/Python.framework/Versions/2.6//Extras/lib/python/PyObjC/AppKit/_nsview.so 
/System/Library/Frameworks/Python.framework/Versions/2.6//Extras/lib/python/PyObjC/AppKit/_nswindow.so 
/System/Library/Frameworks/Python.framework/Versions/2.6//Extras/lib/python/PyObjC/CFNetwork/_manual.so 
+0

谢谢!你的回答让我走出这条沟,让我走向正确的方向。 – navicore

+2

正如预防措施一样,切勿在OS X中使用静态库。即使您专门链接到静态库,它们也是“不推荐使用”的,OSX会尽可能将动态库链接到静态库。 例如如果你链接到/path/to/libfoo.a和libfoo.dylib或者libfoo.so存在于路径的任何地方,链接器将会明显地忽略你的请求,如果这两个表有不同的表,那么会导致一些非常有趣的运行时未定义符号错误。 – jkyle

相关问题