【问题标题】:Windows C Runtime library not linking like I expect?Windows C 运行时库没有像我期望的那样链接?
【发布时间】:2012-03-30 17:20:20
【问题描述】:

作为一名长期的 POSIX/Linux/BSD C 开发人员,现在尝试使用 Visual C++ 2010 做一些事情,我有点摸索工具,因为它的工作方式与 GCC 不太一样工具集可以。理论上,至少根据文档,它看起来非常相似(我敢肯定),但我没有看到我期望看到的东西。

在这种情况下,我正在尝试构建一个 C 库以供以后在 .NET 项目中使用,并且我想小心避免以后发生运行时冲突。我的想法是构建一个静态库,链接到 C 运行时的 DLL 版本(调试配置中的 msvcr100d.dll),所以我设置了/MDd 标志。但是,当我使用 dumpbin.exe 检查生成的 .lib 输出时,它没有显示依赖项或导入。

两个问题,真的:

  1. 首先这是一个坏主意吗?我应该构建 DLL 还是链接静态 CRT?
  2. 当我使用/MDd 时,为什么dumpbin.exe 不显示对CRT 的依赖关系?

更新Choosing the Correct C/C++ Runtime Library 非常有用且内容丰富。我尝试了他建议的dumpbin 咒语,输出显示该库确实链接到msvcrtd,但这并不能真正回答我上面的第二个问题。

【问题讨论】:

  • 哇。我仍在谷歌搜索这个问题,这个问题在涉及“dumpbin”和“家属”的搜索中已经是#4。他们必须不断地抓取这个网站。
  • 除非您使用的是 C++/CLI,否则它应该感觉几乎相同。话虽如此......代码......请!如果/当您将问题更新到我可以解决特定问题的程度时,我将发布您的问题的答案。
  • @Ramhound:嗯...代码与这个问题无关。这是一个工具问题。我已经提出了具体的问题。如果你不能解决它们,那不是因为我没有解释手头的问题。

标签: c windows visual-studio-2010 visual-c++


【解决方案1】:

因为这不是最终的 EXE 或 DLL,所以没有导入部分。取而代之的是,有链接器指令说明此库希望如何链接。

dumpbin /directives thoraway.lib

Microsoft (R) COFF/PE Dumper Version 10.00.40219.01
Copyright (C) Microsoft Corporation.  All rights reserved.


  Dump of file throwaway.lib

  File Type: LIBRARY

  Linker Directives
  -----------------
  /FAILIFMISMATCH:"_MSC_VER=1600"
  /FAILIFMISMATCH:"_ITERATOR_DEBUG_LEVEL=2"
  /DEFAULTLIB:"msvcprtd"
  /DEFAULTLIB:"MSVCRTD"
  /DEFAULTLIB:"OLDNAMES"
  /EDITANDCONTINUE

 Summary

     CFC .debug$S
      4C .debug$T
      A2 .drectve
       B .rdata
       4 .rtc$IMZ
       4 .rtc$TMZ
      49 .text

【讨论】:

  • 啊,好的。这就说得通了。谢谢!
猜你喜欢
  • 2016-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-26
相关资源
最近更新 更多