python3.6 cython编译解决无Python.h等头文件问题

跑3DDFA代码,需要cython编译一个C++的函数

(应该是由一个.cpp .pyx编译出一个.so文件)

build的过程中发现include的部分报错

mesh_core_cython.cpp:4:10: fatal error: Python.h: 没有那个文件或目录
 #include "Python.h"
          ^~~~~~~~~~
compilation terminated.
error: command 'x86_64-linux-gnu-gcc' failed with exit status 1

在文件系统用

locate Python.h

看一下程序想要的这个头文件目前的路径

发现是在 usr/include/python2.7下

通过修改setup.py里的

setup(
    name='mesh_core_cython',
    cmdclass={'build_ext': build_ext},
    ext_modules=[Extension("mesh_core_cython",
                           sources=["mesh_core_cython.pyx", "mesh_core.cpp"],
                           language='c++',
                           # include_dirs=[numpy.get_include()])],
                           include_dirs=["/usr/include/python2.7"])]
)

成功编译出了.so 文件和.cpp函数,但是后面程序调用的时候报错

undefined symbol: _Py_ZeroStruct

查了查可能是因为编译的python版本和调用的python版本不一致,我项目要用的是python3.6,但上面我是用系统自带的python2.7的头文件编译的,所以当然不行。

但为什么我没有一个python3.6的文件夹下有同样的头文件呢

原来是因为我没有装python3 dev

用下面的命令安装

sudo apt-get install python3-dev

过程中出现错误,官网资源列表里是对应ubuntu18.04.3的,而我目前的系统是18.04.01,所以用下面的命令更新下系统之后重新装

 sudo apt update
sudo apt-get install python3-dev

现在就有3.6的目录了,如下图

改路径

setup(
    name='mesh_core_cython',
    cmdclass={'build_ext': build_ext},
    ext_modules=[Extension("mesh_core_cython",
                           sources=["mesh_core_cython.pyx", "mesh_core.cpp"],
                           language='c++',
                           # include_dirs=[numpy.get_include()])],
                           include_dirs=["/usr/include/python3.6"])]
)

然后重新编译!调用成功啦!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值