gpt4 book ai didi

python - 无法将 cython 生成的 C 语言代码转换为可执行文件

转载 作者:行者123 更新时间:2023-12-02 10:56:12 26 4
gpt4 key购买 nike

我正在使用 Windows 操作系统。我有 Visual Studio 和与之相关的所有构建工具。我有简单的 python 脚本。我使用 cython 生成了一个“C”文件。我正在尝试将此 C 文件转换为可执行文件。我不想使用任何其他模块,如 pyinstaller、py2exe 或 cxFreeze。

从 .py 到 C 的转换是成功的。但遗憾的是,我在将此 C 文件转换为可执行文件时遇到了一些错误。

谁能帮帮我?我已经检查了有关此问题的各种其他问题,但没有人遇到此问题。

这是我的(.pyx 脚本)

from tkinter import Tk

root = Tk()
root.mainloop()

我在 CMD 中使用以下命令为此脚本构建 C 扩展:
python setup.py build_ext --inplace -DMS_WIN64

然后我在 CMD 中使用这个命令来构建一个可执行文件:
gcc -DMS_WIN64 C:/Users/Siva/Desktop/Scripts/TEST/test.c -IC:/"Program Files"/Python37/include -LC:/"Program Files"/Python37/libs -lpython37 -o output

这会产生以下错误:
C:\Users\Siva\Desktop\Scripts\TEST>gcc -DMS_WIN64 C:/Users/Siva/Desktop/Scripts/TEST/test.c -IC:/"Program Files"/Python37/include -LC:/"Program Files"/Python37/libs -lpython37.a -o output
C:/Users/Siva/Desktop/Scripts/TEST/test.c:213:41: warning: division by zero [-Wdiv-by-zero]
enum { __pyx_check_sizeof_voidp = 1 / (int)(SIZEOF_VOID_P == sizeof(void*)) };
^
C:/Users/Siva/Desktop/Scripts/TEST/test.c:213:12: error: enumerator value for '__pyx_check_sizeof_voidp' is not an integer constant
enum { __pyx_check_sizeof_voidp = 1 / (int)(SIZEOF_VOID_P == sizeof(void*)) };
^~~~~~~~~~~~~~~~~~~~~~~~

我附上了下面的错误截图

enter image description here

最佳答案

最后经过长期的永恒斗争,我找到了解决方案。感谢 Joshua 的大力支持。

.PYX 代码有一个小的修改。看起来我们必须在一个函数中定义所有内容,这样当代码转换为 C 语言时,它就有一个 main 函数。

所以第一步是将.PYX编辑为:

from tkinter import Tk

cdef public void function():
root = Tk()
root.mainloop()

if __name__ == "__main__":
function()

然后我用下面的命令生成了头文件(.h)和C程序文件
python -m cython test.pyx --embed

这是诀窍:

转到生成的 C 程序文件并搜索 wmain 函数并从中删除“w”。或者,您可以 Ctrl + F 搜索 wmain 并将其实例替换为 main。

例如,在我的程序中只有一个 wmain 实例。我把它改成了主要的。它看起来像下面显示的代码。只需将 wmain 更改为 main。
#if PY_MAJOR_VERSION < 3
int main(int argc, char** argv) {
#elif defined(WIN32) || defined(MS_WINDOWS)
int wmain(int argc, wchar_t **argv)

然后我使用 GCC 命令生成可执行文件。命令如下。我不明白它为什么起作用。但确实如此。
x86_64-w64-mingw32-gcc-8.1.0 -mconsole -DSIZEOF_VOID_P=8 -DMS_WIN64 C:/Users/Siva/Desktop/Scripts/CYTHON/test.c -IC:/"Program Files"/Python37/include -LC:/"Program Files"/Python37/libs -lpython37 -o output

我只希望有人能解释为什么方法有效。

关于python - 无法将 cython 生成的 C 语言代码转换为可执行文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63382101/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com