我有以下问题,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