如何让Visual Studio 2013 dlls依赖项落后?

时间:2014-02-06 11:44:54

标签: c++ visual-studio-2013

我的应用程序在其他计算机上打开时会出现错误msvcr“something”.dll,我发现为了解决这个问题,他们需要安装以下内容: http://www.microsoft.com/en-us/download/details.aspx?id=40784

Visual Studio 2013的Visual C ++ Redistributable Packages。

我想用可执行文件中的dll编译程序,这样的事情可能吗?

如果不可能,我在哪里可以将所有dll放入已编译的项目文件夹中?

3 个答案:

答案 0 :(得分:11)

尝试在/MT中为发布设置/MTd,为Project Settings->C/C++->Code Generation设置v120_xp。这将使您的程序不依赖于Visual Studio库。但请注意,您将链接的所有库/项目也应该具有相同的选项,否则您将得到令人讨厌的链接器错误。

您可能还希望在General->Platform Toolset中选择{{1}},以便您的程序能够在Windows XP上运行

答案 1 :(得分:3)

因为许多程序使用这些dll的功能,所以它们是动态链接的 所以你的文件大小很小,如果在dll中修复你不需要重新编译你的程序。

如果您不想要这种行为,可以在项目设置中将dll设置为“静态链接”(/ MT)。 这样他们就会编译成你的可执行文件

Here是相关的MSDN文章

答案 2 :(得分:0)

  

Visual Studio 2013的Visual C ++ Redistributable Packages。

对于Visual Studio 2013,您需要:

如果您使用Visual Studio 2012构建,则需要:

如果您使用Visual Studio 2012构建,则需要:

关键是,如果您使用newmallocdelete,{{1}等函数编写可移植的C / C ++代码,则可能需要运行时。等等。

如果使用Win32 API,则可以避免使用该代码。例如,freeHeapAlloc等。安装程序经常使用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上使用。因此计算机可能已经拥有它们。 / p>

但通常你只是构建你的安装程序来随身携带你需要的东西。我使用Inno Setup因为它允许您并排包含x86和x64组件。在安装时,您只需根据体系结构(x86 vs x64)安装正确的组件,包括正确的运行时。 (当我选择Inno时,Wix不允许混合架构,我想要一个统一的安装程序)。