Windows环境gcc无法编译Cython产生的c文件

setup.py:

# setup.py
from distutils.core import setup
from Cython.Build import cythonize

setup(
    ext_modules = cythonize("main.py")
)

使用命令

python setup.py build_ext --inplace

生成了main.c文件和main.cp38-win_amd64.pyd文件

在windows环境下使用上述命令是需要安装Microsoft Visual C++ 14.0 和 Microsoft C++ Build Tools的,不然会遇到以下提示:

Microsoft Visual C++ 14.0 or greater is required. Get it with “Microsoft C++ Build Tools“

具体安装方法参见CPython在Window环境中的使用教程

现在要做的事情就是将main.c编译成为exe文件

在文章python可以直接转C么中查到命令:

gcc -o output your_file.c -I /path/to/python/include -lpython3.x

其中your_file.c在我的这里就是main.c,而/path/to/python/include与-lpython3.x的含义是什么呢?

/path/to/python/include是编译.c文件需要指定includes的路径,-lpython3.x是编译需要链接的库文件,分别是存放python头文件和库文件的地方,怎么知道这个位置在哪里呢?

使用命令

pip show dbf

其中dbf是任意使用pip install安装的第三方包,运行该命令将会看到:

于是我们知道python的include目录和库文件目录位于:

C:\Users\xxx\AppData\Local\Programs\Python\Python38\include

和:

C:\Users\xxx\AppData\Local\Programs\Python\Python38\libs

打开库文件目录可以看到:

于是编译命令为:

gcc -o output main.c -I C:\Users\xxx\AppData\Local\Programs\Python\Python38\include -L C:\Users\xxx\AppData\Local\Programs\Python\Python38\libs -l python38

但是遇到以下提示:

在文章windows下使用gcc调用python的问题中得知:

用gcc编译了一个C++调用python的程序,这个程序在VS下是好用的,而且没有使用vs的任何库

可是到了gcc下就是无法使用

后来上网查了一下资料才知道,是因为cl与gcc的运行时库不同。

打开cmd窗口,输入python就可以看到

Python 3.0 (r30:67507, Dec  3 2008, 20:14:27) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.

python的windows版本是用MSC编译的

所以python.lib中的运行时库与gcc无法匹配

于是查看自己的python

确实如此

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值