导入wx在GDB python接口下失败,R6034:应用程序尝试错误地加载C运行时库

时间:2014-07-28 05:19:43

标签: python dll gdb dependencies wxpython

我在WinXP下有一个自我构建GDB.exe,它与python 2.7 dll链接。 GDB是在 msys + MinGW 下构建的,因此GDB.exemsvcrt.dll相关联。但是python dll与msvcrt90.dll相关联。请参阅下面的依赖性walker屏幕截图。 dependency walker of gdb.exe 通常,GDB.exe中的python解释器工作得很好,我可以正确运行python pretty printer和其他python命令。 但我发现wxPython无法正常运行,请参阅命令日志:

GNU gdb (GDB) 7.8.50.20140717-cvs
Copyright (C) 2014 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "mingw32".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word".
(gdb) python import wx
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "E:\code\gdb\mybuild\bin\lib\site-packages\wx-3.0-msw\wx\__init__.py", li
ne 45, in <module>
    from wx._core import *
  File "E:\code\gdb\mybuild\bin\lib\site-packages\wx-3.0-msw\wx\_core.py", line
4, in <module>
    import _core_
ImportError: DLL load failed: The specified module could not be found.
Error while executing Python code.
(gdb)

我意识到文件夹下有一些dll:E:\code\gdb\mybuild\bin\Lib\site-packages\wx-3.0-msw\wx,例如"core_.pyd""wxmsw30u_core_vc90.dll",这些dll是从 Visual C ++ 构建的,而你可以看到,它们与msvcr90.dllmsvcp90.dll相关联。 msvcr90.dll and msvcp90.dll dependency

但是如果我在python.exe(即E:\code\gdb\mybuild\bin\python.exe)命令行shell下运行相同的命令,则没有这样的问题,请参阅日志:

Python 2.7.6 (default, Nov 10 2013, 19:24:18) [MSC v.1500 32 bit (Intel)] on win
32
Type "help", "copyright", "credits" or "license" for more information.
>>> import wx
>>>

看,我运行import wx命令没有任何问题。 我还注意到python.exe是针对msvc90.dll构建的,请参阅下面的依赖性walker屏幕截图:

python.exe dependency

现在,我的问题是:如何解决这个问题?据我所知,两种不同类型的DLL(msvcrt.dllmsvcrt90.dll)可以和平地工作,但为什么我不能使用 wxpython ?谢谢。

2 个答案:

答案 0 :(得分:1)

好的,问题解决了。原因是文件夹E:\code\gdb\mybuild\bin\Lib\site-packages\wx-3.0-msw\wx下的pyd文件和dll文件都需要与清单相关联。我通过名为Resource Hacker的工具手动将清单添加到pyd文件中,但我认为任何可以编辑PE文件的工具都可以执行此操作。 pyd文件已经有了一些清单,所以我只想添加更多:

<dependency>
<dependentAssembly>
  <assemblyIdentity type='win32' name='Microsoft.VC90.CRT' version='9.0.21022.8' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
</dependentAssembly>
</dependency>

对于dll文件,我刚发现官方wxPython站点的wxpython开发包32-bit binaries for MSVC 9中有清单文件,所以我只是将清单文件复制到E:\code\gdb\mybuild\bin\Lib\site-packages\wx-3.0-msw\wx

我现在没有问题,我可以正确显示来自GDB命令行的wxFrame。

答案 1 :(得分:0)

我已经尝试过ollydbg23的过程。更改仅在重新启动后生效。