2013-02-08 31 views
15

पर एसडब्ल्यूआईजी के साथ सी ++ संकलन मैं मैक ओएस एक्स के लिए स्विग का उपयोग कर एक सी ++ एक्सटेंशन संकलित करने की कोशिश कर रहा हूं। हालांकि मैंने कुछ लिंकर त्रुटियों में भाग लिया है। अजगर बड़ा घूँट के लिए बुनियादी ट्यूटोरियल भी मैक पर विफल लगता है:मैक ओएस एक्स

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 

पहली तीन पंक्तियों ठीक काम करते हैं। अंतिम पंक्ति एक लिंकर त्रुटि के साथ विफल रहता है। मैं इस के साथ ओएस एक्स पर अंतिम पंक्ति की कोशिश की, और एक ही त्रुटि मिली:

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

अंतिम पंक्ति से त्रुटि है:

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 

धन्यवाद।

+4

'संकलन लाइन जोड़ने मुद्दे के समाधान करना चाहिए के अंत में -lpython', लेकिन मैक साझा वस्तुओं विस्तार' है .dylib' – Petesh

+0

धन्यवाद, @Petesh - कि काम करता है! मैं अपने मुख्य स्विग कोड (कुछ कार्यों के लिए अपरिभाषित प्रतीकों के साथ एक अलग मुद्दे पर लटका रहा था, जिसे मैंने swig.i फ़ाइल में टिप्पणी की थी)। बेसिक स्विग कार्यक्षमता अब काम करता है। –

+0

आआंद फिर से बंद-उपयोगी-थ्रेड फेयरी स्ट्राइक। एक मैक पर जब कई एसडब्ल्यूआईजी आधारित पुस्तकालयों के साथ काम करना एक आम और व्यापक समस्या है। तुम इसे बंद क्यों करोगे ?! – Shayne

उत्तर

14

पूर्णता के लिए - धन्यवाद पेटेश।

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