visual我如何确定我的程序需要运行哪些c++可再发行文件
visual 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 FilesMicrosoft SDKsWindowsv7.0ABootstrapperPackagesvcredist_x86
如果您安装了所有更新,包括不重要的更新,Microsoft将更新该文件夹中的redist!
也许你有一个不想运行的可执行文件,你需要依赖助行器。这是一个非常有用的工具,以至于微软不得不将其从Visual Studio中删除。下载程序并在其中打开你的exe。你不需要了解真正发生了什么。只要在打开过程中没有出现对话框,即使底部窗口中有感叹号,一切都可以。如果对话框出现类似"无法解决"的内容,请查看底部窗口。通常在下面的窗户里有这样的东西"msvcr.dll"、"msvcr100.dll"或"msvcr110.dll"。如果它在扩展名(如"msvcr100d.dll")之前包含一个"d",则可执行文件是在调试模式下编译的,您的旅程将在没有安装编译器的系统上结束。如果没有,名称会告诉你需要哪个vcredist:
msvcr100=VS 2010 redist(32位)(64位)
msvcr110=VS 2012 redist(32/64位?)
有时它不是msvcr,但它总是以"ms"开头。当然,程序会告诉你每一个缺少的dll,而不仅仅是微软和dll中的哪个命令被使用。这有时非常有用。你必须对可执行文件文件夹中的每个dll都这样做,因为它们也可能具有不可解决的依赖关系
回到你的第一个问题。您的程序只能链接到msvcr100或msvcr110,而不能同时链接到两者,这就是为什么每个可执行文件只需要一个vcredist的原因。正如评论中提到的,第三方DLL可能因使用不同的msvcp版本而有罪。所以,是的,你必须搜索所有你使用的DLL,你必须安装两个vcredist一些时候。
附言:它们总是至少有两个,msvcr和msvcp。
如果您想知道需要哪些运行时,可以尝试在github上使用lucasg中的"Dependencies"工具(https://github.com/lucasg/Dependencies)它适用于像win10这样的现代系统。
您只需要在依赖关系树中查找MsVcR##.dll
或VcRuntime###.dll
(其中#代表数字)。。
HTH-
附言:我们多年来一直使用的古老而忠实的"依赖性助行器"似乎无法处理较新操作系统处理延迟依赖性的方式,将其标记为"丢失",虽然它们没有丢失,但只是以一种它不知道的方式延迟加载。。。
我如下(在Windows 7上)解决了这个问题:
- 我试图加载库,但它失败了,显示"应用程序无法启动,因为它的并排信息不正确。"
- 我打开了"计算机管理"窗口:开始->右键单击计算机->管理
- 在"计算机管理"窗口中,我选择了"事件查看器"->"Windows日志"->"应用程序"
- 与错误相对应的日志显示,找不到特定版本Microsoft.VC90.CRT的DLL。在我的案例中,版本是9.0.30729.6161,在谷歌上搜索发现我需要从这里安装一个"不寻常"的可再发行版本
依赖性助行器对我没有帮助(它只是报告了不必要的依赖性,让我感到困惑)。
如果您的操作系统是Vista或更高版本(而不是XP),请使用内置的SxStrace.exe生成正在加载的DLL以及需要它们的模块的日志。它将清楚地显示您是否正在加载多个CRT DLL版本,以及DLL的内容(第三方或否)。
VS2012可再发行文件被放入,例如"C:\Program Files(x86)\Microsoft Visual Studio 11.0\VC\redist"。
--David
- .cpp和.h文件中的模板专用化声明
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 文本文件中的单词链表
- CMake-按正确顺序将项目与C运行时对象文件链接
- 使用新行和不使用新行读取文件
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 挂起和取消挂起一个文件DLL
- 如何确定我已使用非编码文件到达 EOF?
- 命名空间中具有.h和.cpp文件的类
- 如何使用ndk-build.cmd构建Android.so文件
- 从包含m行的文件中提取n行,必要时(惰性地)重复该文件
- 读取文件并输入到矢量中
- 在C++中查找文件
- c++库的公共头文件中应该包含什么
- 用c++从输入文件中读取另一行
- Cppcheck生成xml转储文件
- 读取文件的最后一行并输入到链接列表时出错
- 无法编译 rtmidi 测试 cmidiin.cpp 文件, 非法指令
- 如何将内容数组写入文本文件?
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到