gpt4 book ai didi

python - swig 生成的代码链接到错误的 python 安装

转载 作者:太空宇宙 更新时间:2023-11-03 18:29:15 24 4
gpt4 key购买 nike

我有以下问题,

我正在使用 swig 来构建一个 python 模块来包装 C 代码。我已经使用 MacPorts 安装了 python、gcc(45)、..。

这是重现问题的最小设置:

两个文件:

测试.i:

%module test
double sum(double a, double b);

测试.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)

我发现在 swig 生成的文件 test.py 中,行 #include <Python.h>被包含。但是/System/Library/... 中有一个 Python.h,在/opt/local/... 中有一个 Python.h我的猜测是错误发生在这里。但是如何使编译器/链接器指向正确的编译器/链接器呢?

非常感谢您的帮助!!托马斯

最佳答案

我没有 Mac,但是在使用 swig( swig docdistutil doc )时,通过使用 distutils 处理 Linux 和 Windows 上的多个 Python 版本,我得到了很好的结果。下面显示了 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 绑定(bind)到调用的 python 版本并了解 swig。然而,编译很重要:

python setup.py build_ext
python setup.py build_py

并且不直接调用构建。

关于python - swig 生成的代码链接到错误的 python 安装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22649379/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com