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客户端引起的.
那么......如何在类似情况下找到问题?
在此处下载Process Explorer .
启动应用程序并重现运行时错误R6034.
启动Process Explorer.在"视图"菜单中,转到"下窗格视图"并选择"DLL".
在顶部窗格中,找到您的应用程序并单击它.底部窗格应显示为您的应用程序加载的DLLS列表.
在列表中找到"msvcr ?? .dll".应该有几个.查找不在"winsxs"文件夹中的那个,并记下它.
现在,检查应用程序运行之前的路径.如果它包含您在步骤5中记下的文件夹,您可能已经找到了罪魁祸首.
如何解决问题?在运行程序之前,您必须从路径中删除有问题的条目.就我而言,我在路径中不需要任何其他内容,因此我编写了一个简单的批处理文件,如下所示:
path=
myprogram.exe
Run Code Online (Sandbox Code Playgroud)
而已.批处理文件只是在程序运行之前清除路径,因此找不到冲突的运行时DLL.
希望这可以帮助!
这篇文章详细介绍了@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)
| 归档时间: |
|
| 查看次数: |
47422 次 |
| 最近记录: |