2013-02-08 6 views
15

Ich versuche, eine C++ - Erweiterung mit Swig für Mac OS X zu kompilieren. Ich habe jedoch ein paar Linker Fehler aufgetreten. Die grundlegenden Tutorial für Python Swig scheinen auch auf dem Mac zum Scheitern verurteilt:Kompilieren von C++ mit SWIG unter Mac OS X

http://www.swig.org/Doc1.3/Python.html#Python_nn10

swig -c++ -python example.i 
g++ -O2 -fPIC -c example.cxx 
g++ -O2 -fPIC -c example_wrap.cxx -I/usr/include/python2.6 
g++ -shared example.o example_wrap.o -o _example.so 

Die ersten drei Zeilen funktionieren. Die letzte Zeile schlägt mit einem Linkfehler fehl. Ich habe versucht, die letzte Zeile auf OS X mit diesem, und bekam den gleichen Fehler:

g++ -dynamiclib example.o example_wrap.o -o _example.so 

Der Fehler aus der letzten Zeile ist:

Undefined symbols for architecture x86_64: 
    "_PyArg_ParseTuple", referenced from: 
     __wrap_fact in example_wrap.o 
    "_PyArg_UnpackTuple", referenced from: 
     _SwigPyObject_own in example_wrap.o 
    "_PyBool_FromLong", referenced from: 
     _SwigPyObject_richcompare in example_wrap.o 
     _SwigPyObject_own in example_wrap.o 
... 
ld: symbol(s) not found for architecture x86_64 
collect2: ld returned 1 exit status 

Dank.

+4

'-lpython' am Ende der Kompilierung Zeile sollte die Verknüpfung Problem beheben, aber Mac gemeinsam genutzte Objekte haben die Endung' .dylib' – Petesh

+0

Danke, @Petesh - das funktioniert! Ich habe mich auf ein anderes Problem mit meinem Haupt-Swig-Code festgelegt (undefinierte Symbole für einige Funktionen, die ich in der swig.i-Datei auskommentierte). Basic Swig-Funktionalität funktioniert jetzt. –

+0

Aaaa und wieder der close-usable-thread fairys strike. Dies ist ein häufiges und häufiges Problem beim Arbeiten mit mehreren SWIG-basierten Bibliotheken auf einem Mac. Warum zur Hölle würdest du es schließen ?! – Shayne

Antwort

14

Der Vollständigkeit halber - danke Petesh.

swig -c++ -python example.i 
g++ -O2 -fPIC -c example.cxx 
g++ -O2 -fPIC -c example_wrap.cxx -I/usr/include/python2.6 
g++ -lpython -dynamclib example.o example_wrap.o -o _example.so