使用Cython将Python编译为C

使用Cython将Python编译为C,python,c,linux,gcc,cython,Python,C,Linux,Gcc,Cython,我正在尝试使用将python源代码foo.py编译为C 在foo.py中: print "Hello World" 我正在运行的命令是cythonfoo.py 问题是,在使用编译foo.c时,出现了以下错误: 对“main”的未定义引用阅读Cython文档。这也将(希望)教你什么是Cython,什么不是。Cython用于创建python扩展(不是通用的python-to-C编译器),这些扩展是共享对象/DLL。动态加载的库不像独立程序那样具有main函数,但编译器假定它们最终链接的是可执行文件

我正在尝试使用将
python
源代码foo.py编译为C

foo.py
中:

print "Hello World"
我正在运行的命令是
cythonfoo.py

问题是,在使用编译foo.c时,出现了以下错误:


对“main”的未定义引用

阅读Cython文档。这也将(希望)教你什么是Cython,什么不是。Cython用于创建python扩展(不是通用的python-to-C编译器),这些扩展是共享对象/DLL。动态加载的库不像独立程序那样具有
main
函数,但编译器假定它们最终链接的是可执行文件。您必须通过标志(
-shared
methinks,但请再次参阅Cython文档)告诉他们其他情况,或者更好的是,不要自己编译,为此使用
setup.py
(同样,请阅读Cython文档)。

将代码从python转换为c(使用Cython)它将其转换为可编译为共享对象的c代码。 为了使其可执行,您应该在cython转换命令中添加“-embed”。此标志添加了所需的“main”函数,因此可以将c代码编译成可执行文件。
请注意,您需要python
。因此
运行库才能运行exec。

通常的方法是使用distutils编译cython生成的文件。这还以可移植的方式为您提供了所需的所有include目录。

对于我来说,这个答案导致编译了一个工作扩展。RoeeK的回答解决了链接问题,但Python导入失败后出现错误
ImportError:dynamic模块未定义init函数
。真的非常感谢,我认为如果能像3 rtfm建议的那样,在不假设愚蠢的情况下,用较少的演讲风格来写它会更好。如果这个答案包含到和的链接,那么它将是完美的。请参阅。