11

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

foo.py

print "Hello World"

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

问题是,当使用 foo.c 编译时gcc,出现错误:

undefined reference to 'main'.

4

3 回答 3

23

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

于 2010-12-12T15:07:04.880 回答
10

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

于 2010-12-12T13:24:31.273 回答
0

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

于 2010-12-12T16:03:59.880 回答