You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 05:36:22