Visual Studio:命令行错误 D8016:"/Ox" 和 "/RTC" 命令行选项不兼容。

9
我正在使用Visual Studio 2012编写C++项目。我尝试在构建项目时使用O2或Ox优化,但出现了错误提示:"cl: 命令行错误D8016:'/ Ox'和'/ RTC'命令行选项不兼容。"。
我曾经在网上寻找解决方案,但对我无效。
希望有人能够帮助我。
最好的祝福。
3个回答

5
首先,你的错误代码是错误的。你可能在发布时犯了一个错误,应该是D8016,而不是D0816。希望你没有犯其他可能误导我们的错误...
除此之外,错误信息很清楚:
Visual Studio:命令行错误D0816:'/Ox'和'/RTC'命令行选项不兼容
但你也可以在这里看到这种错误类型的描述: 命令行错误D8016 简短的答案 - 就像错误所说的那样 - 你不能同时使用它们两个。生活充满了妥协,你需要选择其中一个,无论哪个对你更重要。
解决方案是在发布版本中关闭/RTC,仅在调试版本中使用它来查找问题。有关详细信息,请参见相应文档,该文档也可从上面的第一个链接中获取。
运行时错误检查是您在运行代码时查找问题的一种方式;有关更多信息,请参见如何:使用本机运行时检查。
如果您使用任何/RTC编译器选项在命令行上编译程序,则您代码中的任何#pragma optimize指令都将悄无声息地失败。这是因为运行时错误检查在发布(优化)构建中无效。
您应该在开发构建中使用/RTC;不应在零售构建中使用/RTC。不能使用编译器优化(/O选项(优化代码))和/RTC。使用/RTC构建的程序映像将比使用/Od构建的映像稍微大一些,稍微慢一些(比/Od构建慢高达5%)。

谢谢,我已经修正了标题的拼写错误。我想使用/OX选项,怎么做呢? - DreamOn
嗨Laszlo,我只是在VS中关闭/STC并在没有调试的情况下运行它。我对Visual Studio还很陌生。谢谢!你介意我将@txtechelp标记为正确答案吗?因为他/她的积分较少.. - DreamOn
@user3342797:没问题。 :) 我假设你是指关闭/RTC而不是/STC - László Papp
感谢您在StackoverFlow上给我带来了一次很棒的提问体验,我喜欢这个地方,因为有像您这样的人。 - DreamOn
我遇到了一个问题,其中/OUT:/O混在一起,导致出现D8016错误,但实际上并不存在这种情况。 - Sandburg

3
根据 MSDN 文档:你不能在使用/O 选项(优化代码)的情况下使用 /RTC
如果你想使用优化,关闭 /RTC 标志(或关闭运行时检查的优化)。
或者为所需的单独标志创建不同的构建配置(如调试和发布构建),以避免所有这些问题。

谢谢您的信息,我知道它们不能同时使用。但是我该怎么解决呢?我不需要调试我的代码。 - DreamOn
如果您在VS中构建,则MSDN文档会说明如何将其“关闭”,如果您是从命令行构建,则只需删除/RTC标志。 - txtechhelp
非常感谢。我不熟悉使用VS命令行进行构建。我只是关闭了/STC。非常感谢您的帮助。 - DreamOn

2

要通过GUI关闭/RTC,只需转到项目 -> 属性 -> C/C++ -> 代码生成:

enter image description here

并将“基本运行时检查”设置为默认值。


...或者如果是通过命令行界面构建的,则从命令行中删除/RTC


...或者在.vcxproj文件中禁用它,通过更改

<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>

<BasicRuntimeChecks>Default</BasicRuntimeChecks>

在相应的配置中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接