忽略crt库的特定库?

时间:2011-11-16 13:19:23

标签: visual-c++ linker msvcrt

在一个非常古老的代码库中,我们为Visual C ++项目设置提供了一些令人困惑且看似不必要的构建设置。

我们的C ++项目是使用visual studio(目前正在使用vs 2010)构建的,并且在链接器选项中,有一些库被指定用于忽略特定的库'链接器设置。其中一些库是:msvcirt.lib和msvcrtd.lib。

所以对于这个问题: 我无法弄清楚为什么忽视这些特定的图书馆是必要的?

我最好的猜测是: 也许在视觉工作室的早期还有必要吗? ......出于一些奇怪的原因,只有那些知道它的人才知道。

默认情况下,使用VS 2010制作C / C ++项目(即.vcxproj)时,不会明确忽略这些库。因此,我99%确定99%的时间都不需要此链接器设置。有没有人同意我的意见?

当我使用依赖walker来检查我构建的任何旧DLL时,我可以看到,如果我在ADVAPI32.dll中链接它是对msvcrt.dll的依赖。但那真的不应该是我关心的......

2 个答案:

答案 0 :(得分:2)

当您链接多个编译方式不同的库时,核心库中存在冲突。

我遇到了一些问题,在使用/ clr标志编译C ++ / CLI时我必须使用它。

一些例子:

Difficulty Building with Visual Studio 2010

Visual Studio .NET 2003 - Ignore Specific Library for libcmt vs libcmtd

答案 1 :(得分:2)

甚至变得更糟。您必须忽略的库取决于您实际使用的库。(如果不这样,您最终可能会遇到像堆损坏等问题。)

因此,鉴于项目的特性(MultiThreaded,SingleThreaded,..),您必须使用特定的运行时库。查看here以了解要使用的运行时库的概述。

鉴于您使用的运行时库,您必须忽略其他人。请查看here,了解要忽略的库。