我有以下問題,swig生成的代碼鏈接到錯誤的python安裝
我正在構建一個使用swig包裝C代碼的python模塊。 我已經安裝了python,gcc(45),..使用MacPorts。
這裏有一個最小的設置,其中再現了問題:
兩個文件:
test.i:
%module test
double sum(double a, double b);
test.c的:
double sum(double a, double b){return a+b;}
我跑
$ swig -python -I. test.i
$ gcc -fPIC -I/opt/local/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 -c test_wrap.c
$ gcc -c -o test.o test.c
$ gcc -shared -I/opt/local/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 -lpython -dynamiclib -fPIC -o _test.so test.o test_wrap.o
當我運行python(MacPorts之一:/opt/local/bin/python2.7)並嘗試通過import test
導入模塊時,代碼崩潰時的問題與上述完全相同。
檢查與otool文件_test.so產生以下:
$ otool -L _test.so
_test.so:
_test.so (compatibility version 0.0.0, current version 0.0.0)
/System/Library/Frameworks/Python.framework/Versions/2.7/Python (compatibility version 2.7.0, current version 2.7.2)
/usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1669.0.0)
/opt/local/lib/libgcc/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0)
我發現,在test.py線#include <Python.h>
的痛飲生成的文件包含。然而,在/ System/Library /中有一個Python.h,而在/ opt/local /中有一個...... 我的猜測是這裏發生了錯誤。但是,我怎樣才能讓編譯器/鏈接器指向正確的?
非常感謝您的幫助! Thomas
我找到了答案,而不是'-I/opt/local/Library ... -lpython',使用'-F/opt/local/Library/Frameworks/-framework python'。 – Thomasillo