我试图使用cython
将python
源代码foo.py编译为C.使用Cython将Python编译为C
在foo.py
:
print "Hello World"
我跑的命令是cython foo.py
。
的问题是,使用gcc
编译foo.c的时候,我得到的错误:
undefined reference to 'main'
。
我试图使用cython
将python
源代码foo.py编译为C.使用Cython将Python编译为C
在foo.py
:
print "Hello World"
我跑的命令是cython foo.py
。
的问题是,使用gcc
编译foo.c的时候,我得到的错误:
undefined reference to 'main'
。
将代码从python转换为c(使用Cython)时,它将其转换为可以编译到共享对象中的c代码。 为了使其可执行,您应该将“--embed”添加到cython转换命令中。这个标志增加了你需要的'main'功能,所以你可以把c代码编译成可执行文件。 请注意,您需要python .so
运行时库才能运行该exec。
阅读Cython文档。这也会(希望)会教你什么是Cython,什么不是。 Cython用于创建Python扩展(不是通用Python-to-C编译器),它们是共享对象/ dll。动态加载库不像独立程序那样具有main
函数,但编译器假定它们最终链接一个可执行文件。您必须通过标志(-shared
methinks,但请再次参考Cython文档)告诉他们 - 或者甚至更好,不要编译自己,请使用setup.py
(另请阅读Cython文档)。
通常的方法是使用distutils编译cython生成的文件。这也以便携的方式为您提供所需的所有包含目录。
+1为解释 – user225312 2010-12-12 13:55:10
对我来说,这个答案导致编译一个工作扩展。 RoeeK的答案解决了链接问题,但是在Python导入错误“ImportError:动态模块没有定义init函数”后无法导入。非常感谢你,我认为在不假设愚蠢的情况下用更少的演讲风格写出它会更好,正如3 rtfm所暗示的那样。 – deeenes 2015-11-19 14:51:18