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