ctypes 在 /sw/lib 中找不到 fink 安装的库



ctypes找不到通过fink安装的库,这些库位于/sw/lib/下,除非我明确给出库的完整路径

>>> import ctypes
>>> ctypes.CDLL('libgoffice-0.8.dylib')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/sw/lib/python2.7/ctypes/__init__.py", line 353, in __init__
    self._handle = _dlopen(self._name, mode)
OSError: dlopen(libgoffice-0.8.dylib, 6): image not found
>>> ctypes.CDLL('/sw/lib/libgoffice-0.8.dylib')
<CDLL '/sw/lib/libgoffice-0.8.dylib', handle 336500 at 2b10b0>
>>>

然而,使用gcc对这些库进行编译效果良好;他们总是被找到。为什么ctypes不能定位这些库,我该怎么做才能让它定位它们?

这是在OS X 10.6.8上,fink在/sw/bin/python2.7下安装了Python 2.7。

问题似乎是fink从未设置LD_LIBRARY_PATH变量。ctypes使用默认情况下不会在/sw/lib中搜索的dlopen()。来自dlopen手册页:

dlopen()在目录spec中搜索兼容的Mach-O文件-通过一组环境变量和流程的当前工作目录设置时,环境变量必须包含冒号sep-目录路径的arated列表,可以是绝对的,也可以是相对于当前工作目录。环境变量是LD_ IBRARY_,BRARY_PATH和DYLD_FALLBACK_LIBRARY_PATH。前两个变量-ables没有默认值。DYLD_FALL的默认值-BACK_LIBRARY_PATH是$HOME/lib/usr/local/lib/usr/lib。dlopen()在中搜索环境变量中指定的目录按顺序列出。

因此,解决方案似乎是放入.profile.bash_profile.bashrc

export LD_LIBRARY_PATH=/sw/lib:"${LD_LIBRARY_PATH}"

fink似乎也在/sw/lib下的子目录中安装了一些库,例如/sw/lib/mysql。在这些情况下,您还必须显式地包括这些,因为dlopen()似乎不会递归地搜索LD_LIBRARY_PATH中的路径。在MySQL的情况下,您需要将其添加到以下路径中:

export LD_LIBRARY_PATH=/sw/lib:/sw/lib/mysql:"${LD_LIBRARY_PATH}"

相关内容

  • 没有找到相关文章

最新更新