Python for Windows 在调用 MinGW-w64 编译库的函数时挂起
Posted
技术标签:
【中文标题】Python for Windows 在调用 MinGW-w64 编译库的函数时挂起【英文标题】:Python for Windows hang while calling a function of MinGW-w64 compiled library 【发布时间】:2016-09-16 02:50:42 【问题描述】:我正在使用 ctypes 调用 MinGW-w64 编译库的函数。
C 代码:
#include <stdio.h>
int hello()
printf("Hello world!\n");
return 233;
Python 代码:
from ctypes import *
lib = CDLL("a.dll")
hello = lib.hello
hello.restype = c_int
hello()
在 MinGW-w64 中使用 gcc 编译 C 代码:
gcc tdll.c -shared -o a.dll
然后在 Windows 3.5.2 的 Python 中运行 python 代码,python 挂在 hello() 上,CPU 使用率为 100%。 然后我尝试在 Python 中为 MinGW 3.4.3 运行 python 代码(从 msys2 repo 安装),没问题。
那么我的代码有什么问题?我该如何解决?
【问题讨论】:
如果删除 printf 调用会发生什么? @2501 : 正常返回233。 【参考方案1】:在 msys 中使用“x86_64-w64-mingw32-gcc”或“i686-w64-mingw32-gcc”代替“gcc”!
“gcc”命令调用 x86_64-pc-msys-gcc。
【讨论】:
当您在 MINGW32 或 MINGW64 shell 中时,“gcc”命令将调用“i686-w64-mingw32-gcc”或“x86_64-w64-mingw32-gcc”。当然必须先安装。以上是关于Python for Windows 在调用 MinGW-w64 编译库的函数时挂起的主要内容,如果未能解决你的问题,请参考以下文章
如何在Windows上使用Python for .NET进行多处理?
Python中for循环相关的几个小练习,生成指定位数的验证码序列,移位加密