2012-07-19 11 views
7

Python'da yeni başlayan biriyim. Mac OS X Lion tipi kütüphanesi ile aşağıdaki Python örnek kod çalıştığında:Mac OS X Lion Python Ctype CDLL hatası lib.so.6: resim bulunamadı

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 

kimse meselesi bana söyleyebilir:

#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) 
// 

bir hata şöyle oluştu? BTW, bunu Windows ve Linux'ta denedim; iyi çalıştı. Ctype için bir yapılandırma yapmam gerekiyor. Bunun yerine "libc.dylib" kullanmak gerekir böylece

Çok teşekkürler,

Ricky

cevap

14

Mac OS X'deki paylaşılan kütüphaneler, .so yerine .dylib uzantısına sahip olma eğilimindedir. Bu durumda, /usr/lib/libc.dylib istediğin şey bu yüzden libc.dylib'u yükler.

+0

Teşekkürler Kevin, şimdi çalışıyor. – Gickian

4

OS X, onun paylaşılan nesnelerin uzantı için ".dylib" kullanır.

0

Bir çapraz platform çözümü böyle bir şey kullanmak olacaktır: güzel çalışmıyor gibi görünüyor hem de fark bu alternatifler arasından ne olduğunu emin

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

Değil!