【问题标题】:cannot import DLL with Ctypes.cdll无法使用 Ctypes.cdll 导入 DLL
【发布时间】:2019-07-25 12:51:40
【问题描述】:

我是第一次使用树莓派,我想用python导入一个DLL文件。 我在 Windows 上试过了,但在树莓上我得到了这个错误,

" OSError : Name.dll: 无法打开共享对象文件: 没有这样的文件或目录"

.txt 你好,

我是第一次使用树莓派,我想用python导入一个DLL文件。 我在 Windows 上试过了,但在树莓上我得到了这个错误,

" OSError : Name.dll: 无法打开共享对象文件: 没有这样的文件或目录"

有什么帮助吗?

print(struct.calcsize("P")*8)
32
import os
os.chdir("/home/pi/Documents/sens2020")
from ctypes import *
import ctypes
my_dll = ctypes.cdll.LoadLibrary("Sense2020Dll.dll")

【问题讨论】:

  • 您是否尝试写入文件的完整路径? my_dll = ctypes.cdll.LoadLibrary("/home/pi/Documents/sens2020/Sense2020Dll.dll")
  • 感谢您的回复,我试过了,我有这个错误“OSError: path: invalid ELF header”!
  • 这个错误意味着找到了文件。但是 DLL 无法打开。您确定在 Raspberrypi 上加载 DLL 是可行的吗?由于 DLL 是为 Windows 制作的。也许你应该创建一个 .SO
  • 是否可以将 .dll 转换为 .so ?
  • 我没有这个dll的源代码

标签: python dll raspberry-pi ctypes


【解决方案1】:

除非您的 Raspberry pi 上的操作系统是 Windows,否则您不应尝试加载 .DLL 文件。它们仅适用于 Windows。

回想起来,您可以构建一个 32 位和 64 位的 .DLL。因此,请密切关注您如何构建 .DLL 以及您正在使用的 Windows 架构。

对于基于 linux,您将需要一个共享库 .so。您必须重新构建项目以创建 .so

如果您没有.DLL的源代码,我认为没有直接的方法可以将dll转换为SO。

【讨论】:

  • 如果我尝试使用调用 .dll 的函数创建共享 library.so 会怎样。有可能吗?
  • Linux 和 Windows 是二进制不兼容的,库也是如此。系统调用不一样。也许在不久的将来,Windows 将能够在 Windows 中使用他们的下一个内置 Linux 内核运行 .so。但我怀疑反过来
  • 也许你可以在你的树莓派上使用 Wine。 Wine 是一种(但不是真的)Unix 系统上的 Windows 模拟器。我不知道DLLs 是否可以在此运行。
  • 另一种选择是在您的 Rasberry 上安装 Windows 10 IoT,但它仍然需要为 ARM 架构构建 dll,而不是像我们的基本计算机那样 32 或 64。
  • 非常感谢先生
猜你喜欢
  • 1970-01-01
  • 2021-08-15
  • 2022-12-03
  • 1970-01-01
  • 2016-12-12
  • 2013-07-28
  • 1970-01-01
  • 1970-01-01
  • 2019-12-12
相关资源
最近更新 更多