【问题标题】:What's the difference between libs under Debug/ and Release/ directory in C?C中Debug/和Release/目录下的libs有什么区别?
【发布时间】:2011-03-15 22:51:54
【问题描述】:

当我链接到 Release/ 下的那个时,出现致命错误:

LINK : fatal error LNK1146: no argument specified with option '/machine:'

然后我尝试链接到Debug/下的.lib,这次成功了。

但是有什么不同呢?

【问题讨论】:

  • 该错误似乎表明链接器的命令行生成出现问题。项目设置 -> 配置属性 -> 链接器 -> 命令行下的命令行是什么样的? (用于释放模式)。在我的身上有一个像/MACHINE:X86这样的选项。

标签: c visual-studio debugging linker release


【解决方案1】:

通常,对调试程序集不进行任何优化,而对发布程序集进行优化。调试程序集也经常会包含一些杂乱无章的源文件行号。

【讨论】:

  • 但是为什么使用发布库构建失败?
  • @ieplugin:这个错误看起来像是你在命令行上打错字了,而不是库与它有任何关系。
【解决方案2】:

这实际上不是 C 题;它与使用的平台有关。

通常会设置一个项目/解决方案来创建一个用于调试的版本和一个用于发布的版本,将它们放在 Debug/ 和 Release/ 目录中是一种常见的区分方式。调试版本通常编译快而运行慢,并且包含将内部执行链接到源代码的信息(例如行号和变量名)。发布版本通常编译速度较慢,运行速度较快,而且跟踪内部发生的事情要困难得多。

很明显,调试版本和发布版本之间必须存在差异,如果只有适当的编译器标志。但是,在我熟悉的构建系统中,可以进行任意其他更改,有时这会导致仅发布版本的错误,这很痛苦。或者,如果 C 代码没有正确指定行为,调试和发布版本可能会以不同的方式解释它,这也是一种痛苦。

在这种情况下,我猜它们的构建方式有所不同。如果没有更多信息,我真的无法进一步评论。

什么是操作系统?使用的 C 编译器是什么?您使用什么构建系统(如果您使用的是 IDE,可能是 IDE 的一个标准)?你用的是什么库。您的组织是构建它,还是从外部获取它?知道这些事情会给我们一个线索,让我们从哪里开始寻找。

【讨论】:

    【解决方案3】:

    您可能希望分别更改调试版本和发布版本的构建配置。

    【讨论】:

      猜你喜欢
      • 2010-10-30
      • 2016-04-11
      • 2020-11-04
      • 2013-03-24
      • 2013-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-03
      相关资源
      最近更新 更多