使用 Cython 将 Python 编译为 C

发布于 2024-10-07 09:12:10 字数 357 浏览 4 评论 0原文

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

在 foo.py 中:

print "Hello World"

我运行的命令是 cython foo.py。

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

对“main”的未定义引用

I'm trying to compile python source code foo.py to C using cython.

In foo.py:

print "Hello World"

The command I'm running is cython foo.py.

The problem is that when compiling foo.c using gcc, I get the error:

undefined reference to 'main'.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

千寻… 2024-10-14 09:12:10

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

when converting the code from python to c (using Cython) it converts it to c code which can be compiled into a shared object.
in order to make it executable, you should add "--embed" to cython conversion command. this flag adds the 'main' function you need, so you could compile the c code into executable file.
please notice you'll need the python .so runtime libraries in order to run the exec.

梦回旧景 2024-10-14 09:12:10

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

Read the Cython documentation. This will also (hopefully) teach you what Cython is and what it isn't. Cython is for creating python extensions (not a general-purpose Python-to-C-compiler), which are shared objects/dlls. Dynamically loaded libraries don't have a main function like standalone programs, but compilers assume that they are ultimately linking an executable. You have to tell them otherwise via flags (-shared methinks, but again, refer to the Cython documentation) - or even better, don't compile yourself, use a setup.py for this (yet again, read the Cython documentation).

咽泪装欢 2024-10-14 09:12:10

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

The usual way is to use distutils to compile the cython-generated file. This also gives you all the include directories you need in a portable way.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文