Mac OS X Lion Python Ctype CDLL错误lib.so.6:找不到映像



我是Python的初学者。当我在Mac OS X Lion上尝试以下带有类型库的Python示例代码时:

#hello.py
from ctypes import *
cdll.LoadLibrary("libc.so.6")
libc = CDLL("libc.so.6")
message_string = "Hello World! Hello Python!n"
libc.printf("Testing :%s",message_string)
//

出现以下错误:

Traceback (most recent call last):
File "cprintf.py", line 2, in <module>
cdll.LoadLibrary("libc.so.6")
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ctypes/__init__.py", line 431, in LoadLibrary
return self._dlltype(name)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ctypes/__init__.py", line 353, in __init__
self._handle = _dlopen(self._name, mode)
OSError: dlopen(libc.so.6, 6): image not found

有人能告诉我怎么回事吗?顺便说一句,我在Windows和Linux上试过这个;效果很好。需要我为ctype做一些配置。

非常感谢

Ricky

Mac OS X上的共享库的扩展名往往是.dylib,而不是.so。在这种情况下,/usr/lib/libc.dylib是您想要的,因此加载libc.dylib

OSX使用".dylib"作为其共享对象的扩展,因此需要使用"libc.dylib"。

跨平台解决方案应该使用这样的东西:

import platform
import ctypes
libc = ctypes.cdll.LoadLibrary("libc.{}".format("so.6" if platform.uname()[0] != "Darwin" else "dylib"))
# or ctypes.CDLL("libc.{}".format("so.6" if platform.uname()[0] != "Darwin" else "dylib"))

不太确定这些替代方案之间的区别,因为两者似乎都很好!

最新更新