![](/img/trans.png)
[英]Debugging a C++ program in NetBeans 8.0 which needs the sudo to run
[英]How do I determine which c++ redistributables my program needs to run?
是否有可能我需要为vs2012和vs2010安装vcredist?
我刚刚遇到一个错误,我的应用程序无法加载.dll,并且在我进行了无关的安装后突然开始工作,这促使我猜测它必须安装了一个更老的vcredist来修复问题。 但是我确定我正在使用c ++ 11功能。
部署本身就是一项工作。 我讨厌它,我讨厌你在Windows上编写安装的方式。 ......所以现在感觉好多了......
你只需要一个vcredist。 链接器决定将您的程序链接到的那个。 如果您安装了“Windows SDK”,您将在以下位置找到实际的redist:
C:\Program Files\Microsoft SDKs\Windows\v7.0A\Bootstrapper\Packages\vcredist_x86
如果您安装所有更新,包括不重要的更新,Microsoft将更新该文件夹中的redist!
也许你有一个不想运行的可执行文件,你需要依赖walker 。 一个工具,非常有用,微软必须从Visual Studio中删除它。 下载程序并在其中打开您的exe。 你不需要了解真正发生的事情。 只要在打开过程中没有出现Dialog,即使底部窗口中有感叹号,一切也都可以。 如果对话框出现类似“无法解决”的内容而不是在底部窗口中查看。 通常现在在较低的窗口中有类似“msvcr.dll”或“msvcr100.dll”或“msvcr110.dll”的内容。 如果它在扩展名之前包含“d”,如“msvcr100d.dll”,则可执行文件在调试模式下编译,您的旅程将在没有安装编译器的系统上结束。 如果没有,该名称告诉您需要哪个vcredist:
msvcr100 = VS 2010 redist (32bit) (64bit)
msvcr110 = VS 2012 redist (32 / 64bit?)
有时它不是msvcr但它始终以“ms”开头。 当然程序会告诉你每个缺少的dll,不仅仅是微软和dll中的哪个命令被使用。 这有时非常有用。 您必须对可执行文件夹中的每个dll执行此操作,因为它们也可能具有不可解析的依赖项。
回到你的第一个问题。 您的程序只能链接到msvcr100或msvcr110,而不能同时链接到两者,这就是每个可执行文件只需要一个vcredist的原因。 如评论中所述,第三方DLL可能会使用不同的msvcp版本。 所以,是的,你必须搜索你使用的所有DLL,你必须安装两个vcredist。
PS:总是至少有两个,msvcr和msvcp。
我解决了这个问题如下(在Windows 7上):
依赖性walker对我没有帮助(它只是通过报告不必要的依赖关系而混淆了我)。
如果你想知道需要哪些运行时,可以尝试在github( https://github.com/lucasg/Dependencies )上使用lucasg中的“Dependencies”工具,该工具适用于像win10这样的现代系统。
你只需要在依赖树中查找MsVcR##.dll
o VcRuntime###.dll
(其中#代表一个数字)。
HTH
PS:我们多年来一直使用的老忠实的“依赖性步行者”似乎无法处理新的操作系统处理延迟依赖关系的方式,将它们标记为“缺失”,而它们不会丢失,只是延迟加载一种它不知道的方式......
如果您的操作系统是Vista或更高版本(不是XP),请使用内置的SxStrace.exe生成一个日志,其中包含正在加载的DLL以及需要它们的模块。 它将清楚地显示您是否正在加载多个CRT DLL版本,以及DLL(第三方或否)。
VS2012可再发行组件被放入,例如“C:\\ Program Files(x86)\\ Microsoft Visual Studio 11.0 \\ VC \\ redist”。
- 大卫
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.