2013-02-08 12 views
15

Sto provando a compilare un'estensione C++ usando Swig per Mac OS X. Tuttavia ho riscontrato alcuni errori di linker. Il tutorial di base per Python Swig sembra anche a fallire su Mac:Compilare C++ con SWIG su 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 

Le prime tre righe funzionano bene. L'ultima riga ha esito negativo con un errore del linker. Ho provato l'ultima riga su OS X con questo, e ottenuto lo stesso errore:

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

L'errore dall'ultima riga è:

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 

Grazie.

+4

'-lpython' alla fine della linea di compilazione dovrebbe affrontare la questione che collega, ma Mac condiviso oggetti hanno l'estensione' .dylib' – Petesh

+0

Grazie, @Petesh - che funziona! Mi stavo bloccando su un altro problema con il mio codice Swig principale (simboli non definiti per alcune funzioni, che ho commentato nel file swig.i). Funzionalità di base di Swig funziona ora. –

+0

Aaaa e ancora lo sciopero delle fate da vicino. Questo è un problema comune e ampio che funziona con più librerie basate su SWIG quando su un Mac. Perché diavolo lo chiuderesti ?! – Shayne

risposta

14

Per completezza - grazie 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