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循环相关的几个小练习,生成指定位数的验证码序列,移位加密

Windows 批处理:在 FOR 循环中调用多个命令?

在Windows上安装SCIP for Python不再适用

golang编译dll给C#调用

Python开发环境搭建for Windows