Python通过ctypes调用C函数报WinError 193错误该如何解决?
报错原因
你遇到的WinError 193错误核心原因是不同操作系统的动态库格式不兼容:
.so是Linux/Unix系统下的共享库格式,无法被Windows系统原生识别加载- Windows系统下的动态库后缀为
.dll,你使用了Linux格式的库文件,系统判断它不是合法的Win32/Win64可执行程序,因此抛出错误
额外可能的触发原因:编译的动态库位数和你安装的Python解释器位数不匹配(比如32位dll加载到64位Python环境中)
解决步骤
- 把C代码编译为Windows平台的dll动态库
如果你用MinGW的gcc工具链,执行以下编译命令:
如果你用Visual Studio的MSVC工具链,执行以下编译命令:gcc -shared -fPIC -o my_functions.dll my_functions.ccl /LD my_functions.c - 修改Python代码中的库路径后缀,把
.so替换为.dll,建议同时显式指定函数的参数和返回值类型避免意外错误:from ctypes import * so_file = "C:/PY2C/my_functions.dll" my_functions = CDLL(so_file) # 显式指定函数参数和返回值类型 my_functions.square.argtypes = [c_int] my_functions.square.restype = c_int print(type(my_functions)) print(my_functions.square(10)) print("done") - 保证编译工具链的位数和Python解释器位数一致:如果你的Python是64位版本,就用64位的gcc/MSVC编译dll,32位Python对应32位工具链即可。
内容的提问来源于stack exchange,提问作者Gaetano Veti
相关产品推荐
相关产品推荐

