从Python加载DLL
我正在根据一些找到的源代码构建一个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 个回答
你可能需要安装VC++运行时的再分发组件。你可以在这里找到相关链接。
根据你的更新信息,看来你需要安装 Pycairo,因为你缺少了作为Pycairo一部分的 _cairo 模块。你可以查看 Pycairo下载页面,上面有关于如何获取和安装Windows版本的说明。
我通过使用 /LD 这个编译器选项,成功编译并运行了 Enso。这个选项可以让程序动态链接到 MS Visual C++ 的运行时环境,这样就不需要一个清单文件了。
如果你在使用 SCons,可以查看这里的差异文件: http://paste2.org/p/69732