【问题标题】:Importin dll in Python on Linux在 Linux 上的 Python 中导入 dll
【发布时间】:2013-12-24 13:51:50
【问题描述】:

您好,我有这段代码可以在 Windows 上完美运行:

    import ctypes
    import sys
    import os
    from ctypes import *
    from numpy import *
    import time
    from ctypes.util import find_library
    libEDK = cdll.LoadLibrary("edk.dll")

我尝试在 Ubuntu 上运行它,我得到了这个:

Traceback (most recent call last):

 File "/home/nassar/Downloads/python/sds.py", line 9, in <module> 
   libEDK = cdll.LoadLibrary("/home/nassar/Desktop/python/edk.dll")
  File "/usr/lib/python2.7/ctypes/__init__.py", line 443, in LoadLibrary
    return self._dlltype(name)
  File "/usr/lib/python2.7/ctypes/__init__.py", line 365, in __init__
    self._handle = _dlopen(self._name, mode)
OSError: /home/nassar/Desktop/python/edk.dll: invalid ELF header

【问题讨论】:

    标签: python dll ctypes


    【解决方案1】:

    呃……你不能那样做;

    共享库非常依赖于操作系统,因此为 Windows 构建的库不可能在 linux 中运行,反之亦然。

    除非您可能Wine 上获得一些运气,这是一个适用于许多平台的 Windows 运行时。我在 wine 中运行 Python 二进制文件确实取得了一些成功。

    【讨论】:

    • 你有没有测试过 WINE 的想法?我严重怀疑您是否可以使用 WINE 在 *nix 系统上从 Python 加载 Windows DLL。除非您在 WINE 上运行包括 Python 在内的所有程序——在这种情况下,可以/必须使用原始代码。
    • @lukas: 是的,没错,你必须在 wine 中运行 windows 版本的 python。
    【解决方案2】:

    在 Linux 上,我们有一个名为 shared object (.so) 的东西,而不是 DLL。

    长话短说:您无法在 Linux 系统上加载 Windows DLL。您需要编译一个 Linux 共享库(“edk.so”)。

    【讨论】:

    • 有什么线索可以从哪里开始?将其编译成 .so ?
    猜你喜欢
    • 1970-01-01
    • 2011-07-12
    • 2017-12-20
    • 2015-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多