Python-ctypes nicht das laden der dynamischen Bibliothek auf Mac OS X
Ich habe eine C++ - Bibliothek repeater.so
dass ich laden kann, aus Python in Linux in der folgenden Weise:
import numpy as np
repeater = np.ctypeslib.load_library('librepeater.so', '.')
Allerdings, wenn ich kompilieren die gleiche Bibliothek auf Mac OS X (Snow Leopard, 32-bit) und bekommen repeater.dylib
, und führen Sie dann den folgenden in der Python:
import numpy as np
repeater = np.ctypeslib.load_library('librepeater.dylib', '.')
Bekomme ich die folgende Fehlermeldung:
OSError: dlopen(/mydir/librepeater.dylib, 6): no suitable image found. Did find:
/mydir/librepeater.dylib: mach-o, but wrong architecture
Muss ich etwas anderes machen, zum laden einer dynamischen Bibliothek in Python unter Mac OS X?
Du musst angemeldet sein, um einen Kommentar abzugeben.
NÖ. Wie die Fehlermeldung sagt, es gibt eine Architektur-mismatch zwischen Ihre python und
librepeater.dylib
- Datei. Verwendenfile
zu überprüfen, was die Architektur vonlibrepeater.dylib
ist; Ihre python ist gebaut mithilfe einer von denen, die nicht aufgeführt werden.file
war der trick: ich veränderte die Architektur in den compiler-Einstellungen entsprechend der python-installation und jetzt funktioniert es. Danke!Es ist nicht nur eine Frage, welche Architekturen sind in der dylib; es ist auch eine Sache, über die Architektur der Python-interpreter ausgeführt wird. Wenn Sie die von Apple bereitgestellten Python 2.6.1 in OS X 10.6 Snow Leopard, es läuft standardmäßig im 64-bit Modus, wenn möglich. Da Sie sagen, dass Ihre Bibliothek kompiliert wurde als 32-bit, müssen Sie zu zwingen, Python für die Ausführung im 32-bit-Modus. Für die von Apple mitgelieferten Python, eine Weise zu tun ist, um eine spezielle Umgebungsvariable:
Finden Sie in den Apple
man 1 python
für weitere Informationen.