嵌入式Python应用程序中的运行时错误R6034

Mic*_*per 39 visual-studio-2005 manifest boost-python visual-c++ python-2.7

我正在开发一个使用Boost.Python嵌入Python解释器的应用程序.这用于运行与主程序交互的用户生成的"脚本".

不幸的是,一个用户在尝试运行脚本时报告运行时错误R6034.主程序启动正常,但我认为加载python27.dll时可能会出现问题.

我使用的是Visual Studio 2005,Python 2.7和Boost.Python 1.46.1.问题仅发生在一个用户的计算机上.我以前处理过明显的问题,并设法解决它们,但在这种情况下,我有点不知所措.

有没有其他人遇到过类似的问题?你能解决吗?怎么样?

Mic*_*per 97

我找到了问题的解决方案.希望这会帮助其他人 - 这些问题可能会让调试变得非常令人沮丧.

问题是由第三方软件引起的,该软件已将自身添加到路径并在其程序文件夹中安装了msvcr90.dll.在这种情况下,问题是由英特尔的iCLS客户端引起的.

那么......如何在类似情况下找到问题?

  1. 在此处下载Process Explorer .

  2. 启动应用程序并重现运行时错误R6034.

  3. 启动Process Explorer.在"视图"菜单中,转到"下窗格视图"并选择"DLL".

  4. 在顶部窗格中,找到您的应用程序并单击它.底部窗格应显示为您的应用程序加载的DLLS列表.

  5. 在列表中找到"msvcr ?? .dll".应该有几个.查找不在"winsxs"文件夹中的那个,并记下它.

  6. 现在,检查应用程序运行之前的路径.如果它包含您在步骤5中记下的文件夹,您可能已经找到了罪魁祸首.

如何解决问题?在运行程序之前,您必须从路径中删除有问题的条目.就我而言,我在路径中不需要任何其他内容,因此我编写了一个简单的批处理文件,如下所示:

path=
myprogram.exe
Run Code Online (Sandbox Code Playgroud)

而已.批处理文件只是在程序运行之前清除路径,因此找不到冲突的运行时DLL.

希望这可以帮助!

  • 先生,你是冠军!对我来说,我试图将YouCompleteMe用于gVim,而cmake是将其bin目录添加到包含msvcr90.dll的路径的罪犯.感谢您的出色指示 (11认同)
  • 真有帮助!在运行Omnet ++模拟时,我在Windows上使用"gdb.exe"和"mingw"时遇到了麻烦,程序抛出错误R6034.当我从Windows的PATH中排除CMAKE include时,它现在就像一个魅力.谢谢! (3认同)
  • @martinako我会对那个谨慎.```winsxs```文件夹可以包含许多不同版本的DLL,系统知道如何找到与您的应用程序兼容的版本.如果DLL位于```SysWOW64```文件夹中,那么我认为该版本不会被管理 - 这可能是DLL的旧版本,它与您的应用程序不兼容. (3认同)

Chi*_*nke 5

这篇文章详细介绍了@Micheal Cooper和@frmdstryr,并提供了一个比我之前的回答更好的选择。您可以将以下内容放在python脚本之前,以清除有问题的条目。

import os, re
path = os.environ['PATH'].split(';')

def is_problem(folder):
    try:
        for item in os.listdir(folder):
            if re.match(r'msvcr\d\d\.dll', item):
                return True
    except:
        pass
    return False

path = [folder for folder in path if not is_problem(folder)]
os.environ['PATH'] = ';'.join(path)
Run Code Online (Sandbox Code Playgroud)

对于与YouCompleteMe VIM情况下,你可以把下面的顶部您的vimrc

python << EOF
import os, re
path = os.environ['PATH'].split(';')

def is_problem(folder):
    try:
        for item in os.listdir(folder):
            if re.match(r'msvcr\d\d\.dll', item):
                return True
    except:
        pass
    return False

path = [folder for folder in path if not is_problem(folder)]
os.environ['PATH'] = ';'.join(path)
EOF
Run Code Online (Sandbox Code Playgroud)