【问题标题】:how to solve the os errors [duplicate]如何解决操作系统错误[重复]
【发布时间】:2021-08-17 07:25:42
【问题描述】:
  • 最近我一直在研究 Ctypes。我有一个.C 文件让我打电话 它ABC.C
  • 它有很多功能我只需要调用它 使用Ctypes在python中的Algorithm_Interface函数。
  • 我尝试使用gcc 创建一个.so(类似于库文件)文件from geeks for geeks 源.gcc -fPIC -shared -o libfun.so ABC.c
  • 通过使用该命令,在.C 源文件目录中。一个.so 文件被创建(libfun.so)。

在 python 中,我使用此代码调用该函数:

import ctypes
f=open( "data.txt","r")
Raw_file=f.read()
fun = ctypes.CDLL("D:/NR/SPO2/libfun.so")
fun.Algorithm_Interface.argtypes = [ctypes.c_int]
returnVale = fun.Algorithm_Interface(Raw_file) 

当我尝试运行它时,它返回一个错误。

[WinError 193] %1 is not a valid Win32 application

如何解决?

【问题讨论】:

    标签: python python-3.x


    【解决方案1】:

    Windows 将 .dll 和 .exe 用于应用程序。 .so 是为不同的系统(如 Linux)编译的。

    从外观上看,Python ctypes 使用常规的 Windows 函数,因此也只支持 .dll。

    您需要一个生成 Windows 二进制文件的 gcc 版本来编译您的 C 源代码,然后才能在 Windows 上加载它。

    有很多不同的 GCC for Windows 发行版,例如 Mingw。只需谷歌“GCC for Windows”。

    安装基于 Windows 的 GCC 后,使用它代替当前的 gcc,但使用 libfun.dll 代替 libfun.so。

    【讨论】:

    • DL 和 .SO 有什么不同
    • .SO 相当于 Linux 和类似系统上的 .DLL。两者都是共享库的实现,但在不同的平台上。
    • gcc --version gcc (MinGW.org GCC-6.3.0-1) 6.3.0 版权所有 (C) 2016 Free Software Foundation, Inc. 这是免费软件;查看复制条件的来源。没有保修;甚至不考虑适销性或特定用途的适用性。 “这就是你的意思吗”@marpor
    • 是的,有效果吗?
    • 如果您收到 same 错误,也可能是因为您混合使用了 32 位和 64 位版本。如果您运行的是 32 位 Python,它只会加载 32 位 DLL。因此,请确保您获得相同版本的 Python 和 GCC。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-11
    • 2018-07-09
    • 1970-01-01
    • 2020-08-18
    • 2013-11-22
    • 2014-08-25
    • 2022-01-10
    相关资源
    最近更新 更多