我正在尝试将 Python 3 脚本转换为 C,然后将该 C 文件编译为可执行文件。
我有这个简单的 python 脚本:
def greet(name = ""):
print("Hello {0}".format(name if len(name) > 0 else "World"))
greet("Mango")
我已使用以下命令将此脚本转换为 C 语言:
cython greet.py -o greet.c
然后我使用以下命令编译了 C 文件:
cc greet.c -o greet
输入最后一条命令后,出现错误:
致命错误:Python.h:没有此类文件或目录编译终止。
收到错误后,我返回并意识到我正在使用 Python3 并且我忘记了“cython”后面的“3”。
因此,使用以下命令重新编译了 python 脚本:
cython3 greet.py -o greet.c
然后尝试使用以下命令重新编译 C 文件:
cc greet.c -o greet
这又失败了,并引发了同样的错误,所以我在 SO 和 Google 上搜索,发现了这些问题:
- 致命错误:Python.h:没有这样的文件或目录 https://stackoverflow.com/questions/21530577/fatal-error-python-h-no-such-file-or-directory
- 我的 Ubuntu 系统上有 Python,但 gcc 找不到 Python.h https://stackoverflow.com/questions/8282231/ubuntu-i-have-python-but-gcc-cant-find-python-h
- https://askubuntu.com/questions/526708/fatal-error-python-h-no-file-or-directory https://askubuntu.com/questions/526708/fatal-error-python-h-no-file-or-directory
这些问题中的这些答案都不起作用。
我已确保已使用 cython 安装了所有正确的依赖项apt-get install
and pip install
可悲的是,它似乎仍然不起作用。
检查文档。这还不够gcc x.c -o x
.
本页解释了编译:http://docs.cython.org/src/reference/compilation.html http://docs.cython.org/src/reference/compilation.html
还有很多内容,但直接的答案是:
编译 .c 文件将根据您的操作系统而有所不同。用于编写扩展模块的 Python 文档应该包含一些适用于您的系统的详细信息。这里我们以Linux系统为例:
$ gcc -shared -pthread -fPIC -fwrapv -O2 -Wall -fno-strict-aliasing
-I/usr/include/python2.7 -o yourmod.so yourmod.c
当然,在你的情况下,它会更接近-I/usr/include/python3.4
, 甚至$(pkg-config --libs --cflags python3)
。而且你不是用-shared
,因为你想要一个可执行文件。
最短的“这必须起作用”命令集是:
cython3 --embed greet.py -o greet.c
gcc $(pkg-config --libs --cflags python3) greet.c -o greet
你需要安装pkg-config
如果它丢失了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)