2014-03-26 4 views
1

다음과 같은 문제가 있습니다.swig 생성 코드가 잘못된 파이썬 설치로 연결됩니다.

저는 C 코드를 감싸기 위해 swig를 사용하여 파이썬 모듈을 만들고 있습니다. MacPorts를 사용하여 python, gcc (45)를 설치했습니다.

두 파일 :

테스트 테스트 :

%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 

파이썬 (MacPorts 1 : /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) 

나는 줄 #include <Python.h> test.py 꿀꺽 꿀꺽 생성 된 파일에 포함되어 있음을 발견했다. 그러나 Python.h/System/Library/...와/opt/local /에 있습니다 ... 내 실수는 여기서 실수가 일어나고 있다는 것입니다. 하지만 컴파일러/링커가 올바른 것을 가리킬 수있는 방법은 무엇입니까?

도움을 주셔서 감사합니다. 토마스

+0

나는'-I/opt/local/Library ... -lpython'대신에'-F/opt/local/Library/Frameworks/-framework python'을 사용했다. – Thomasillo

답변

1

나는 맥이 없어,하지만 난 꿀꺽 꿀꺽 (swig docdistutil doc)를 사용하는 경우 리눅스와 윈도우에서 여러 파이썬 버전 다루는의 distutils를 사용하여 좋은 결과를 가지고있다. 다음은 setup.py의 최소 예를 보여줍니다.

from distutils.core import setup,Extension 
ext = Extension('_test',sources=['test.c,test.i']) 
setup(name='test',ext_modules=[ext],py_modules=["test"]) 

Distutils는 호출 파이썬 버전에 바인딩되어 있으며 swig에 대해 알고 있습니다. 그러나 다음과 같이 컴파일하는 것이 중요합니다.

python setup.py build_ext 
python setup.py build_py 

빌드를 직접 호출하지 마십시오.