1

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 上,在/sw/bin/python2.7.

4

1 回答 1

2

问题似乎是 fink 从不设置LD_LIBRARY_PATH变量。默认情况下不会搜索的ctypes用途。从手册页:dlopen()/sw/libdlopen

dlopen() 在由一组环境变量和进程的当前工作目录指定的目录中搜索兼容的 Mach-O 文件。设置后,环境变量必须包含一个以冒号分隔的目录路径列表,它可以是绝对的,也可以是相对于当前工作目录的。环境变量是 LD_LIBRARY_PATH、DYLD_LIBRARY_PATH 和 DYLD_FALLBACK_LIBRARY_PATH。前两个变量没有默认值。DYLD_FALLBACK_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}"
于 2012-03-19T18:47:01.977 回答