2012-07-19 9 views
7

मैं पायथन में एक नौसिखिया हूं। मैं पर मैक ओएस एक्स शेर प्रकार लायब्रेरी के साथ निम्न पायथन नमूना कोड की कोशिश की:मैक ओएस एक्स शेर पायथन सीटीपी सीडीएलएल त्रुटि lib.so.6: छवि नहीं मिली

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 

किसी को भी मुझे बता सकते हैं क्या बात है:

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

कोई त्रुटि निम्नलिखित के रूप में हुई? बीटीडब्ल्यू, मैंने विंडोज और लिनक्स पर यह कोशिश की; यह अच्छी तरह से काम किया। मुझे ctype के लिए कुछ कॉन्फ़िगरेशन की आवश्यकता है।

धन्यवाद बहुत बहुत,

रिकी

उत्तर

14

मैक ओएस एक्स पर साझा लाइब्रेरी .so के बजाय एक्सटेंशन .dylib है। इस मामले में, /usr/lib/libc.dylib वह है जो आप libc.dylib लोड करना चाहते हैं।

+0

धन्यवाद केविन, यह अब काम करता है। – Gickian

4

ओएस एक्स, अपने साझा वस्तुओं के विस्तार के लिए ".dylib" का उपयोग करता है ताकि आप के बजाय "libc.dylib" का उपयोग करने की जरूरत है।

0

एक क्रॉस मंच समाधान कुछ इस तरह उपयोग करने के लिए होगा:

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")) 
नहीं

काफी यकीन है कि क्या अंतर है, इन विकल्पों के बीच है दोनों के रूप में अच्छी तरह से काम करने के लिए लग रहे हैं!