如何在OSX上让Python加载dylib

8 投票
1 回答
18170 浏览
提问于 2025-04-15 20:40

我在macOS上进行单元测试时,想从当前的'.'目录加载一个共享库。

在Linux和NetBSD上可以正常工作的方式是有一个符号链接 _mymodule.so --> ../.libs/libmymodule.so

但在macOS上,Python的 import mymodule 找不到这个库。

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

我试着在脚本环境中添加了

export DYLD_LIBRARY_PATH=.:$DYLD_LIBRARY_PATH

但还是不行。希望能得到一些帮助。

-Ed

更新于2010年4月6日:

根据下面krunk提供的信息解决了这个问题。但是,仅仅复制或用ln -s命令将dylib链接到一个.so名字并没有完全解决问题。它还是无法加载。不过,告诉libtool用-module标志来链接这个库,创建了一个可以加载的.so库。现在Python版本的库可以用了。

现在如果我能让Perl库也工作就好了。我正在构建swig的Perl、Python、Ruby和Lua库,而这个修复只让Python和Lua工作了。

1 个回答

14

在OS X系统中,你也可以使用*.so作为模块的扩展名。我记得之前有一次遇到过不能加载.dylib文件的问题,后来发现是Python本身的问题……不过现在我找不到当时的邮件讨论记录了。

不过你可以放心,使用*.so文件在OS X上是标准做法。整个框架中唯一的*.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

撰写回答