python 调用C程序异常 OSError: [WinError 193] %1 不是有效的 Win32 应用程序
问题描述
import ctypes
import os
_file = 'libsample.dll'
# 序列解包语法:*tuple
_path = os.path.join(*(os.path.split(__file__)[:-1] + (_file,)))
print(type(os.path.split(__file__)[:-1]))
_mod = ctypes.cdll.LoadLibrary(_path)
# int gcd(int, int)
gcd = _mod.gcd
gcd.argtypes = (ctypes.c_int, ctypes.c_int)
gcd.restype = ctypes.c_int
异常信息
Traceback (most recent call last):
File "m:/Workspaces/python workspace/python cookbook/prj15/prj15_1/src/sample.py", line 8, in <module>
_mod = ctypes.cdll.LoadLibrary(_path)
File "F:\sdk\python\Python37\lib\ctypes\__init__.py", line 442, in LoadLibrary
return self._dlltype(name)
File "F:\sdk\python\Python37\lib\ctypes\__init__.py", line 364, in __init__
self._handle = _dlopen(self._name, mode)
OSError: [WinError 193] %1 不是有效的 Win32 应用程序。
分析原因
- python的sdk版本64位 和 MinGW版本32位,版本不匹配
解决方法
- 将MinGW版本32位更换为mingw64版本64位
- 因为我装的是双环境,修改path环境变量即可
变量名 | 变量值 |
---|
MINGW64_HOME | F:\sdk\mingw64 |
Path追加 | %MINGW64_HOME%\bin |