Windows下Python调用C函数遇WinError193:非有效Win32应用程序
问题:Python调用C函数时触发WinError 193错误
相关代码文件
C文件(privilegesFunctions.c)
#include <stdio.h> #include "privilegesFunctions.h" void helloWorld() { printf("hello world"); }
头文件(privilegesFunctions.h)
void helloWorld();
Python脚本代码
libCalc = ctypes.CDLL("./privLib.so") libCalc.helloWorld()
报错信息
Traceback (most recent call last): File "C:\Users\deslo\OneDrive\Documents\Cours\Mines Ales\Prague\Secure Code\projet\main.py", line 121, in <module> mainApp() File "C:\Users\deslo\OneDrive\Documents\Cours\Mines Ales\Prague\Secure Code\projet\main.py", line 24, in mainApp libCalc = ctypes.CDLL("./privLib.so") File "C:\Users\deslo\AppData\Local\Programs\Python\Python310\lib\ctypes\__init__.py", line 374, in __init__ self._handle = _dlopen(self._name, mode) OSError: [WinError 193] %1 n’est pas une application Win32 valide
解决方案
- 核心原因:Windows系统无法识别Linux/Unix平台的
.so共享库格式,必须编译为Windows专用的.dll动态链接库。 - 重新编译C代码:使用Windows平台的编译器(如MinGW、MSVC)生成
.dll文件。以MinGW为例,执行以下命令:
其中gcc -shared -o privLib.dll privilegesFunctions.c-shared参数指定生成共享库,-o用于指定输出文件的名称(必须带.dll后缀)。 - 修改Python脚本:将加载
.so库的代码改为加载.dll:libCalc = ctypes.CDLL("./privLib.dll") libCalc.helloWorld() - 额外注意:确保编译使用的编译器架构(32位/64位)与你的Python版本完全一致。比如Python是64位,就必须用64位的编译器编译,否则仍会出现类似的架构不兼容错误。
内容的提问来源于stack exchange,提问作者Luca170598
相关产品推荐
相关产品推荐

