2013-02-08 40 views
15

Tôi đang cố gắng biên dịch một phần mở rộng C++ bằng Swig cho Mac OS X. Mặc dù vậy, tôi đã gặp phải một số lỗi liên kết. Các hướng dẫn cơ bản cho Python Uống một lân cũng dường như thất bại trên Mac:Biên dịch C++ với SWIG trên 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 

Ba dòng đầu tiên hoạt động tốt. Dòng cuối cùng không thành công với lỗi trình liên kết. Tôi đã thử các dòng cuối cùng trên OS X với điều này, và có những lỗi tương tự:

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

Các lỗi từ dòng cuối cùng là:

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 

Cảm ơn.

+4

'-lpython' ở cuối dòng biên dịch phải giải quyết vấn đề liên kết, nhưng đối tượng chia sẻ Mac có phần mở rộng' .dylib' – Petesh

+0

Cảm ơn, @Petesh - hoạt động! Tôi đã được treo lên trên một vấn đề khác nhau với mã Swig chính của tôi (biểu tượng không xác định cho một số chức năng, mà tôi nhận xét ra trong tập tin swig.i). Chức năng Swig cơ bản hoạt động ngay bây giờ. –

+0

Aaaaand một lần nữa các câu chuyện cổ tích gần gũi hữu ích tấn công. Đây là một vấn đề phổ biến và rộng lớn làm việc với nhiều thư viện dựa trên SWIG khi trên một mac. Tại sao các địa ngục bạn sẽ đóng nó ?! – Shayne

Trả lời

14

Để hoàn thành - cảm ơn 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