python 调用C程序异常 OSError: [WinError 193] %1 不是有效的 Win32 应用程序

问题描述

  • 运行python程序
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
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐