2013-02-08 13 views
15

Próbuję skompilować rozszerzenie C++ za pomocą Swig dla Mac OS X. Mam jednak do czynienia z kilkoma błędami linkera. Podstawowy poradnik dla Pythona Swig również wydaje się nie działać na Mac:Kompilowanie C++ z SWIG na 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 

Pierwsze trzy linie działać prawidłowo. Ostatni wiersz kończy się niepowodzeniem z błędem linkera. Próbowałem ostatnią linię na OS X z tym, i dostał ten sam błąd:

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

Błąd z ostatniej linii to:

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 

Dzięki.

+4

'-lpython' na końcu linii kompilacji powinni zająć się kwestią wiążącą, ale Mac wspólne obiekty mają rozszerzenie' .dylib' – Petesh

+0

Dzięki, @Petesh - to działa! Zostałem zawieszony na innym numerze z moim głównym kodem Swiga (niezdefiniowane symbole dla niektórych funkcji, które skomentowałem w pliku swig.i). Podstawowe funkcje Swig działają teraz. –

+0

Aaaa i ponownie ostrzeżenie o bajecznie bliskich użytecznych wątkach. Jest to powszechny i ​​szeroki problem podczas pracy z wieloma bibliotekami opartymi na SWIG. Dlaczego do diabła chcesz to zamknąć ?! – Shayne

Odpowiedz

14

Dla kompletności - dziękuje 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