我正在尝试将python
源代码 foo.py 编译为 C 使用cython
.
在foo.py
:
print "Hello World"
我正在运行的命令是cython foo.py
.
问题是,当使用 foo.c 编译时gcc
,出现错误:
undefined reference to 'main'
.
当将代码从 python 转换为 c(使用 Cython)时,它会将其转换为可以编译为共享对象的 c 代码。为了使其可执行,您应该将“--embed”添加到 cython 转换命令。这个标志添加了你需要的'main'函数,所以你可以将c代码编译成可执行文件。请注意,您需要 python.so
运行时库才能运行 exec。
阅读 Cython 文档。这也将(希望)教你 Cython 是什么,不是什么。Cython 用于创建 python 扩展(不是通用的 Python 到 C 编译器),它们是共享对象/dll。动态加载的库没有main
独立程序那样的功能,但编译器假定它们最终链接的是可执行文件。你必须通过标志告诉他们(我认为-shared
,但同样,请参阅 Cython 文档) - 或者更好的是,不要自己编译,setup.py
为此使用 a (再次阅读 Cython 文档)。
通常的方法是使用 distutils 编译 cython 生成的文件。这还以可移植的方式为您提供了所需的所有包含目录。