【问题标题】:Ignore specific libraries for crt libraries?忽略crt库的特定库?
【发布时间】:2011-11-16 13:19:23
【问题描述】:

在一个非常古老的代码库中,我们有一些用于可视化 C++ 项目设置的构建设置,这些设置令人困惑且似乎没有必要。

我们的 C++ 项目是使用 Visual Studio(目前使用 vs 2010)构建的,在链接器选项中,为“忽略特定库”链接器设置指定了一些库。其中一些库是:msvcirt.lib 和 msvcrtd.lib。

所以对于这个问题: 我一生都想不通为什么要忽略这些特定的库?

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

默认情况下,使用 VS 2010 创建 C/C++ 项目(即 .vcxproj)时,不会特别忽略这些库。因此,我 99% 确信此链接器设置在 99% 的情况下都不是必需的。有人同意我的观点吗?

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

【问题讨论】:

  • 在尝试链接使用错误设置(例如 /MT 与 /MD)编译的 .obj 或 .lib 文件时避免生成链接器错误是一种常见的技巧。真正的解决办法是正确编译代码。

标签: visual-c++ linker msvcrt


【解决方案1】:

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

在编译带有 /clr 标志的 C++/CLI 时,我遇到了一些问题。

几个例子:

Difficulty Building with Visual Studio 2010

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

【讨论】:

  • 我的项目也忽略了 lib libcmt.lib 和 libcmtd.lib 所以你的链接很有趣也很有帮助。
【解决方案2】:

情况越来越糟。您必须忽略的库取决于您实际使用的库。(如果不这样做,您可能会遇到堆损坏等巨大的麻烦)

因此,鉴于您的项目的特性(多线程、单线程、..),您将不得不使用特定的运行时库。查看here 了解使用哪个运行时库的概述。

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

【讨论】:

  • 不懂德语的朋友可以试试thisthis
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-20
  • 1970-01-01
  • 2011-12-21
  • 1970-01-01
相关资源
最近更新 更多