使用Cython将Python编译为C语言

For*_*rge 11 c python linux gcc cython

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

foo.py:

print "Hello World"
Run Code Online (Sandbox Code Playgroud)

我正在运行的命令是cython foo.py.

问题是,在编译foo.c时gcc,我得到错误:

undefined reference to 'main'.

Roe*_*eeK 20

当将代码从python转换为c(使用Cython)时,它将其转换为可以编译为共享对象的c代码.为了使其可执行,你应该在cython转换命令中添加"--embed".这个标志添加了你需要的'main'功能,所以你可以将c代码编译成可执行文件.请注意,您需要python .so运行时库才能运行exec.


小智 11

阅读Cython文档.这也将(希望)教你Cython是什么,不是什么.Cython用于创建python扩展(不是通用的Python-to-C编译器),它们是共享对象/ dll.动态加载的库没有main像独立程序那样的功能,但编译器假设它们最终链接可执行文件.你必须通过标志告诉他们(-sharedmethinks,但是再次参考Cython文档) - 或者甚至更好,不要自己编译,使用一个setup.py(再次,阅读Cython文档).

  • 对我来说,这个答案导致编制了一个有效的扩展.RoeeK的答案解决了链接问题,但在Python导入失败后出现错误`ImportError:动态模块没有定义init函数`.非常感谢你,我认为用更少的讲课风格来写它会更好,而不会像3 rtfm那样假设愚蠢. (4认同)