如何留下 Visual Studio 2013 dll 依赖项?
Posted
技术标签:
【中文标题】如何留下 Visual Studio 2013 dll 依赖项?【英文标题】:How to leave Visual Studio 2013 dlls dependencies behind? 【发布时间】:2014-02-06 11:44:54 【问题描述】:我的应用程序在其他计算机上打开时会出现缺少 msvcr"something".dll 的错误,我发现要解决此问题,他们需要安装以下内容: http://www.microsoft.com/en-us/download/details.aspx?id=40784
Visual Studio 2013 的 Visual C++ Redistributable Packages.
我想用可执行文件中的dll编译程序,这样可以吗?
如果不可能,我在哪里可以得到所有的 dll 以放入已编译的项目文件夹中?
【问题讨论】:
Microsoft Visual Studio ~ C/C++ Runtime Library ~ Static/dynamic linking的可能重复 它们是系统 dll 的。您可以检查安装设置中是否存在可再发行组件,如果安装时缺少,请安装它们。 【参考方案1】:尝试在Project Settings->C/C++->Code Generation
中将/MT
设置为Release,将/MTd
设置为Debug。这将使您的程序不依赖于 Visual Studio 库。但请注意,您将链接的所有库/项目也应该在那里具有相同的选项,否则您会遇到严重的链接器错误。
您可能还希望在General->Platform Toolset
中选择v120_xp
以使您的程序能够在Windows XP 上运行
【讨论】:
@GuilhermeGarciadaRosa 只需尝试将Project Settings->C/C++->Code Generation
设置为MT(d)
,这至少可以解决“msvcr--something”的问题。
我想补充一点,您可以使用 Dependency Walker 来确保您正确配置了应用程序并且它不依赖于 msvcr*.dll:dependencywalker.com【参考方案2】:
因为很多程序都使用这些 dll 的功能,所以它们是动态链接的。 因此,您的文件大小保持较小,并且在 dll 中进行修复时,您不必重新编译程序。
如果您不希望这种行为,您可以在 projectsettings 中将 dll 设置为“静态链接”(/MT)。 这样它们就会被编译成你的可执行文件
Here 是相关的 MSDN 文章
【讨论】:
我也可以把脚本依赖放在那里吗?喜欢带有 .lua 文件的文件夹? 我不确定你想要什么。您可以将其他资源(如 .lua-Files)嵌入到您的可执行文件中,如果这是您想要的? 我认为是,但还有另一个问题,我在哪里可以获得 dll 来静态链接它们?因为微软网站只给你.msi安装 正如 predelnik 所说:进入项目设置->C/C++->代码生成并将运行时库设置为 /MT @GuilhermeGarciadaRosa:您不能静态链接到 DLL,但有可用的 .LIB 包含与 DLL 相同的功能。【参考方案3】:Visual Studio 2013 的 Visual C++ Redistributable Packages.
对于 Visual Studio 2013,您需要:
http://www.microsoft.com/en-us/download/details.aspx?id=40784如果您使用 Visual Studio 2012 进行构建,那么您需要:
http://www.microsoft.com/en-us/download/details.aspx?id=30679如果您使用 Visual Studio 2012 进行构建,那么您需要:
http://www.microsoft.com/en-us/download/details.aspx?id=5555 (x86) http://www.microsoft.com/en-us/download/details.aspx?id=14632 (x64)关键是,如果您使用 new
、malloc
、delete
、free
等函数编写可移植 C/C++ 代码,您可能需要运行时。
如果您使用 Win32 API,您也许可以避免这些代码。例如,HeapAlloc
和 HeapFree
等。安装程序经常使用 Win32 API,这也是他们通常不需要在运行之前安装运行时的原因之一。
我想用可执行文件中的 DLL 编译程序,这可能吗?
是的,有可能。它称为静态链接(相对于动态链接)。
但您可能仍需要运行时。
如果不可能,我在哪里可以获取所有 DLL 以放入已编译的项目文件夹中?
退休忍者给了你这个答案:Microsoft Visual Studio ~ C/C++ Runtime Library ~ Static/dynamic linking。
我的应用程序在其他计算机上打开时会报错缺少 msvcr "something".dll" ...
另一种可能的解决方案是使用 Visual Studio 2005 或 Visual Studio 2008 构建您的项目。VS2005 和 VS2005 使用的运行时通常在 Windows Vista、Windows 7 和 Windows 8 上可用。因此计算机可能已经拥有它们。
但通常你只是构建你的安装程序来携带你需要的东西。我使用Inno Setup,因为它允许您并排包含 x86 和 x64 组件。在安装时,您只需根据架构(x86 与 x64)安装正确的组件,包括正确的运行时。 (当时我选择 Inno,Wix 不允许混合架构,我想要一个统一的安装程序)。
【讨论】:
以上是关于如何留下 Visual Studio 2013 dll 依赖项?的主要内容,如果未能解决你的问题,请参考以下文章
Visual Studio 2013 Tools for Unity安装目录,Visual Studio 2013 Tools.unitypackage
如何设置 TFS 2013 以使用 Visual Studio 2013 或 Visual Studio 2017 构建
如何使用Visual Studio 2013或Visual Studio 2017设置TFS 2013
Intel parallel studio 2017 集成在visual studio 2013 中,现在如何集成到visual studio 2015
为啥我在visual studio 2008 VC++中运行一个Win32控制台应用程序后,弹出一个“没有找到MSVCP90D.dll”?