2012-07-19 7 views
7

私はPythonの初心者です。私は、Mac OS Xのライオンのタイプライブラリでは、次のPythonのサンプルコードを試みたとき:Mac OS X Lion Python Ctype CDLLエラーlib.so.6:画像が見つかりません

#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の設定が必要です。

おかげで非常に多く、

リッキー

答えて

14

Mac OS X上の共有ライブラリは、の代わりに.dylibという拡張子を持つ傾向があります。この場合、/usr/lib/libc.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")) 

かなりわからない:

+0

ありがとうKevin、それは今働きます。 – Gickian

4

OS Xは、その共有オブジェクトの拡張のための "は.dylib" を使用していますので、あなたの代わりに "libc.dylib" を使用する必要があります。

0

クロスプラットフォーム・ソリューションは、このようなものを使用することです!

関連する問題