【问题标题】:Mac OS X Lion Python Ctype CDLL error lib.so.6 : image not foundMac OS X Lion Python Ctype CDLL 错误 lib.so.6:找不到图像
【发布时间】:2012-07-19 05:18:34
【问题描述】:

我是 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 做一些配置。

非常感谢,

瑞奇

【问题讨论】:

    标签: python macos osx-lion


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      OS X 使用“.dylib”作为其共享对象的扩展,因此您需要使用“libc.dylib”来代替。

      【讨论】:

        【解决方案3】:

        一个跨平台的解决方案是使用这样的东西:

        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"))
        

        不太清楚这些替代方案之间有什么区别,因为两者似乎都很好用!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-10-23
          • 2011-10-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-04-05
          • 2012-02-16
          相关资源
          最近更新 更多