如何使python在osx上加载动态库

如何使python在osx上加载动态库,python,macos,dylib,Python,Macos,Dylib,正在osx上的单元测试中尝试从当前“.”目录加载共享库 在Linux和Netbsd上工作的是一个符号链接\u mymodule.so-->...libs/libmymodule.so 但是在osx上,python的import-mymodule找不到 _mymodule.dylib --> ../.libs/libmymodule.dylib 我试着加上 export DYLD_LIBRARY_PATH=.:$DYLD_LIBRARY_PATH 到脚本env,nogo。谢谢你的帮助 -

正在osx上的单元测试中尝试从当前“.”目录加载共享库

在Linux和Netbsd上工作的是一个符号链接
\u mymodule.so-->...libs/libmymodule.so

但是在osx上,python的
import-mymodule
找不到

_mymodule.dylib --> ../.libs/libmymodule.dylib
我试着加上

export DYLD_LIBRARY_PATH=.:$DYLD_LIBRARY_PATH
到脚本env,nogo。谢谢你的帮助

-

2010年4月6日更新:

用下面krunk的信息解决。但是只是把动态库复制到一个。所以名字并不能完全解决这个问题。还是装不下。但是告诉libtool用-module标志链接lib创建了一个.so lib,该lib将被加载。Python版本的lib现在可以工作了


现在,如果我能让perl库正常工作的话。我正在构建swig-perl、python、ruby和lua-libs,这个修复程序只让python和lua工作。

只需使用*.so作为您在OS X中的模块扩展。我有一个模糊的记忆,就是无法加载.dylib,结果证明这是python本身的一个问题。但是我现在找不到邮寄名单

但是,请放心,即使在OSX上使用*.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

谢谢你的回答让我走出了困境,让我朝着正确的方向走了很长一段路。作为预防措施,千万不要在OS X中使用静态库。它们是“不推荐的”,OSX会在可能的情况下将动态库链接到静态库,即使你专门链接到静态库。e、 g.如果您链接到/path/to/libfoo.a,并且libfoo.dylib或libfoo.so存在于路径中的任何位置,那么链接器将很容易忽略您的请求,从而导致一些非常有趣的运行时未定义的符号错误,如果这两个表不同的话