Python 使用cython和wine在Linux上创建可执行窗口
我是法国人,请原谅我的英语 我可以用这行代码在linux上制作并使用pyd(dll)文件Python 使用cython和wine在Linux上创建可执行窗口,python,linux,cross-compiling,cython,wine,Python,Linux,Cross Compiling,Cython,Wine,我是法国人,请原谅我的英语 我可以用这行代码在linux上制作并使用pyd(dll)文件 cython -o script.c script.pyx i586-mingw32msvc-gcc script.c -Wall -I/home/User/.wine/drive_c/Python34/include -shared -o script.pyd /home/User/.wine/drive_c/Python34/libs/libpython34.a 它工作得很好 然而,我测试了这一行以
cython -o script.c script.pyx
i586-mingw32msvc-gcc script.c -Wall -I/home/User/.wine/drive_c/Python34/include -shared -o script.pyd /home/User/.wine/drive_c/Python34/libs/libpython34.a
它工作得很好
然而,我测试了这一行以在Linux上创建可执行窗口,但它不起作用。为什么?
我的路线:
cython --embed -o script.c script.pyx
i586-mingw32msvc-gcc -c -I/home/User/.wine/drive_c/Python34/include -L/home/User/.wine/drive_c/Python34/libs script.c -o script.exe
编辑:返回,该文件是错误格式的可执行文件
EDIT2:彼得的建议
i586-mingw32msvc-gcc -I/home/User/.wine/drive_c/Python34/include /home/User/.wine/drive_c/Python34/libs/libpython34.a script.c -o script.exe
i586-mingw32msvc-gcc -municode -I/home/User/.wine/drive_c/Python34/include /home/User/.wine/drive_c/Python34/libs/libpython34.a script.c -o script.exe
-c选项和libpython34.a添加
结果:
undefined reference to `_WinMain@16'
EDIT3:彼得的建议
i586-mingw32msvc-gcc -I/home/User/.wine/drive_c/Python34/include /home/User/.wine/drive_c/Python34/libs/libpython34.a script.c -o script.exe
i586-mingw32msvc-gcc -municode -I/home/User/.wine/drive_c/Python34/include /home/User/.wine/drive_c/Python34/libs/libpython34.a script.c -o script.exe
-增加市政编码选项
结果:
cc1: error: unrecognized command line option "-municode"
EDIT4:
cc1: error: unrecognized command line option "-municode"
我将script.c中的“wmain”替换为“main”,这是一个错误_WinMain@16已消除,但仍存在类型错误
/tmp/ccVWy25J.o:script.c:(.text+0x1084): undefined reference to `__imp__PyObject_Call'
/tmp/ccVWy25J.o:script.c:(.text+0x1186): undefined reference to `__imp__PyTuple_Pack'
/tmp/ccVWy25J.o:script.c:(.text+0x1218): undefined reference to `__imp__PyOS_snprintf'
提前感谢,该
-c
仅编译,不链接。因此,您要求它生成的.exe
文件无法运行,因为它实际上是一个.obj
文件。您需要从命令行中删除此参数。但是,您还需要重新添加libpython34.a
引用,否则代码将无法链接,因为它将丢失对该库的引用。@Petesh,谢谢。。。请参见我的编辑,出现另一个错误,该错误是由.c
文件中定义的wmain引起的。如果您尝试使用-municode
进行编译,则可能有效,否则您可以编辑文件并交换main/wmain的定义(这将使其进行编译,但会中断命令行解析)@Petesh,已编辑的版本,感谢像-municode
这样的代码在32位编译器上不受支持-有关潜在的解决方法,请参阅前面链接的问题。这是一个mingw编译器和python3的东西。-c
只编译,不链接。因此,您要求它生成的.exe
文件无法运行,因为它实际上是一个.obj
文件。您需要从命令行中删除此参数。但是,您还需要重新添加libpython34.a
引用,否则代码将无法链接,因为它将丢失对该库的引用。@Petesh,谢谢。。。请参见我的编辑,出现另一个错误,该错误是由.c
文件中定义的wmain引起的。如果您尝试使用-municode
进行编译,则可能有效,否则您可以编辑文件并交换main/wmain的定义(这将使其进行编译,但会中断命令行解析)@Petesh,已编辑的版本,感谢像-municode
这样的代码在32位编译器上不受支持-有关潜在的解决方法,请参阅前面链接的问题。这是一个mingw编译器和python3的东西。