2

我正在安装Pyglet作为VisPy的依赖项,但安装后看到以下错误

File "/Library/Python/2.7/site-packages/pyglet/lib.py", line 160, in load_library

raise ImportError('Library "%s" not found.' % names[0])
ImportError: Library "c" not found.

通过挖掘源代码,我意识到 Pyglet 正在尝试使用 ctypes 框架加载标准 C 库。

进一步挖掘揭示了实际的(未吞下的)错误:

File   "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ctypes/__init__.py", line 365, in __init__
self._handle = _dlopen(self._name, mode)
OSError: dlopen(/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/lib/libc.dylib, 6): no suitable image found.  Did find:
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/lib/libc.dylib: mach-o, but wrong filetype

我认为,这个问题类似于架构不匹配的问题。Python C 绑定框架“ctypes”正在尝试加载具有错误架构的 .dylib。

由于我已将 $LD_LIBRARY_PATH 设置为

/Applications.../MacOSX10.10.sdk/usr/lib/

加载程序偏爱这个目录。但是,如果我尝试从标准位置加载“libc.dylib”,/usr/lib一切都会完美运行。

明显的潜在问题是“libc”的 XCode 版本适用于 32 位架构,但/usr/lib适用于 64 位架构。

不对!

这是file两个库的输出:

XCode 版本

libc.dylib: Mach-O universal binary with 2 architectures
libc.dylib (for architecture x86_64):   Mach-O 64-bit dynamically linked shared library stub x86_64
libc.dylib (for architecture i386): Mach-O dynamically linked shared library stub i386

和标准/usr/lib

/usr/lib/libc.dylib: Mach-O universal binary with 2 architectures
/usr/lib/libc.dylib (for architecture x86_64):  Mach-O 64-bit  dynamically linked shared library x86_64
/usr/lib/libc.dylib (for architecture i386):    Mach-O dynamically linked shared library i386

唯一的区别是 XCode 版本是一个“存根”。尽管进行了一些谷歌搜索,但差异并不完全清楚,尽管“存根”dylib 和“非存根”之间的差异似乎是导致问题的原因。

有关我的设置的更多信息:

/usr/bin/python : Python 2.7.10 and appears to be running as a 64-bit app
uname -a: Darwin x-10-104-106-204.uofm-secure.wireless.umn.edu 14.5.0 Darwin Kernel Version 14.5.0: Wed Jul 29 02:26:53 PDT 2015; root:xnu-2782.40.9~1/RELEASE_X86_64 x86_64

因此,我的问题是如何正确链接 XCode 安装的 dylib

提前感谢所有想法和建议。

4

0 回答 0