从Python加载DLL

2 投票
4 回答
2976 浏览
提问于 2025-04-11 19:45

我正在根据一些找到的源代码构建一个Python应用程序,链接在这里:这里

我通过在网上搜索解决了一些问题并成功编译了代码,但现在遇到了瓶颈:

运行应用程序时出现了这个提示。

alt text http://img511.imageshack.us/img511/4481/loadfr0.png

这个Python应用程序使用swig来链接C/C++代码。

我有VC++2005的精简版,用它和scons一起编译,还有Python 2.5(我也试过2.4)

正在尝试加载的dll文件是“msvcr80.dll”,因为之前的提示是“找不到msvcr80.dll”之类的,所以我找到了这个文件并把它放到了windows32文件夹里。

根据我在这里看到的内容:http://msdn.microsoft.com/en-us/library/ms235591(VS.80).aspx

解决方案是用清单和dll文件一起运行MT。我已经这样做了,但还是不行。

有没有人能给我指个正确的方向?

这是清单文件的内容:

<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type='win32' name='Microsoft.VC80.CRT' version='8.0.50608.0' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
    </dependentAssembly>
  </dependency>
</assembly>

我现在打算试试Python 2.6,我不太确定自己是否理解这个问题,但Python 2.5和Python 2.5的.exe文件里有“MSVCR71.dll”这个字符串。不过这可能没什么关系。

附言:要是所有事情都像jar文件那样简单就好了 :(

这是完整的堆栈跟踪信息:

None
INFO:root:Skipping provider enso.platform.osx.
INFO:root:Skipping provider enso.platform.linux.
INFO:root:Added provider enso.platform.win32.
Traceback (most recent call last):
  File "scripts\run_enso.py", line 24, in <module>
    enso.run()
  File "C:\oreyes\apps\enso\enso-read-only\enso\__init__.py", line 40, in run
    from enso.events import EventManager
  File "C:\oreyes\apps\enso\enso-read-only\enso\events.py", line 60, in <module>
    from enso import input
  File "C:\oreyes\apps\enso\enso-read-only\enso\input\__init__.py", line 3, in <module>
    _input = enso.providers.getInterface( "input" )
  File "C:\oreyes\apps\enso\enso-read-only\enso\providers.py", line 137, in getInterface
    interface = provider.provideInterface( name )
  File "C:\oreyes\apps\enso\enso-read-only\enso\platform\win32\__init__.py", line 48, in provideInterface
    import enso.platform.win32.input
  File "C:\oreyes\apps\enso\enso-read-only\enso\platform\win32\input\__init__.py", line 3, in <module>
    from InputManager import *
  File "C:\oreyes\apps\enso\enso-read-only\enso\platform\win32\input\InputManager.py", line 7, in <module>
    import _InputManager
ImportError: DLL load failed: Error en una rutina de inicializaci¾n de biblioteca de vÝnculos dinßmicos (DLL).

4 个回答

0

你可能需要安装VC++运行时的再分发组件。你可以在这里找到相关链接。

2

根据你的更新信息,看来你需要安装 Pycairo,因为你缺少了作为Pycairo一部分的 _cairo 模块。你可以查看 Pycairo下载页面,上面有关于如何获取和安装Windows版本的说明。

0

我通过使用 /LD 这个编译器选项,成功编译并运行了 Enso。这个选项可以让程序动态链接到 MS Visual C++ 的运行时环境,这样就不需要一个清单文件了。

如果你在使用 SCons,可以查看这里的差异文件: http://paste2.org/p/69732

撰写回答