2014-12-01 49 views
7

我知道有关于如何将msvcr120.dll/msvcp120.dll包含到您的项目中的一些问题。摆脱msvcr120.dll/msvcp120.dll依赖于我的发布应用程序(VC++ 2013)

但我想放弃依赖关系。我在Release版本编译程序,在Visual Studio 2013年,我不依赖于任何特定的VS-命令(#pragma等)或预编译头等等

我想把它编译成一个单一的发布.exe和提供给用户而不要求他为VS安装VC++ Redistributes(用户将在Windows 7,Windows 8或Windows XP上工作)。

这可能吗?如果是这样,怎么样?

+1

如果不需要可再发行组件,则必须使用静态运行库。 – drescherjm 2014-12-01 19:50:09

+0

我应该使用/ MT选项吗?对于任何.lib,我都编译并包含到项目中?什么与第三方.dll文件? – PolGraphic 2014-12-01 19:54:01

+1

'#pragma'和大多数VS特定的命令不依赖于msvcr。拥有_globals_取决于C++运行时。这也是主要的问题。你需要这个代码。但是,正如drescherjm所说,你可以在你的exe中嵌入这个lib代码(通过'/ MT'或'/ MTd'选项),然后你不需要单独的dll文件。 – 2014-12-01 19:58:01

回答

13

通过设置/MT标志,您可以将运行系统静态链接到项目。您可以在项目找到在Visual Studio 2013年这一选项>[项目]属性...>配置属性>C/C++>代码生成>运行时库。确保只将其设置为版本配置。

+1

我会推荐这个作为可接受的答案,因为它清楚地描述了它必须完成的工作。指出评论并不能为最终用户提供雄辩的答案。 – 2015-05-04 15:01:25

+1

即使将其更改为MT后,我仍面临同样的问题,但它仍然给msvcr120.dll找不到错误消息 – 2016-07-15 09:07:44

3

来自评论。要删除可能需要可再发行组件的需求,可以使用静态运行时(/ MT选项)而不是任一动态运行时选项来构建应用程序。

+0

感谢您的回答。这种方法有没有副作用?可以添加没有用'/ MT'选项构建的.lib以用'/ MT'选项进行投影吗?如果不是,我如何确定例如一些第三方库已经建立,有或没有'/ MT'选项? – PolGraphic 2014-12-01 20:32:59

+0

第三方DLL很可能会使用/ MD,你想要防止这就是为什么你需要避免这些。 – drescherjm 2014-12-01 20:38:09

+0

@dreschermj - 嗯,好的。但是,为了运行我的游戏/应用程序,要求用户安装VC++重新分发程序是非常不雅观的。我个人不喜欢安装程序试图安装它们或其他共享资源以及我想要安装的应用程序。 – PolGraphic 2014-12-01 20:40:10

相关问题