【问题标题】:C++ no 'object' file generatedC ++没有生成“对象”文件
【发布时间】:2014-01-17 03:16:17
【问题描述】:

这是一些从 Qt 内部获取环境变量的代码,但是,Qt 的 QProcessEnvironment::systemEnvironment() 似乎只反映了重启后新的环境变量更改。所以我正在考虑使用getenv。 但是我从这里得到了"error C2220: warning treated as error - no 'object' file generated"

QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
const QString ENGINE_ROOT = env.value("ENGINE_ROOT", "") != "" ? 
env.value("ENGINE_ROOT","") : QString(getenv("ENGINE_ROOT"));

不要告诉我禁用/WX或将W4降低到W3之类的东西,我不想听到这个,我想知道究竟是什么原因

没有生成“对象”文件

.

【问题讨论】:

  • 您实际收到的警告是什么,触发了 C2220 错误?您的编译器设置为将警告视为错误,错误会导致编译器不生成输出目标文件。为了避免该错误,您需要修复警告。
  • 此外,您最初的“仅在重新启动后反映新的环境变量更改”的问题可能只需重新打开命令提示符窗口(或打开一个新窗口)即可解决。命令提示符窗口继承的环境变量是打开时生效的环境变量。 (或者,any 进程继承的环境变量,例如包括您的 IDE。)
  • 我说的不是在 cmd.exe 中执行它,如果您重新打开另一个 cmd.exe,那么您当然会看到它反映了新的环境变量。我说的是 Qt 中的检索环境变量,它似乎无法即时反映新的变化。
  • OP 陷入了认为“没有生成'对象'文件”是导致错误的警告的陷阱。该错误在 imo 中的措辞含糊不清,并引起了这种混淆。

标签: c++ qt getenv


【解决方案1】:

“错误 C2220:警告视为错误 - 未生成‘对象’文件”

这个错误已经回答了你的问题:

  1. 已生成警告。
  2. 因为您已告诉编译器将警告视为错误,所以发生了错误
  3. 由于发生错误,编译器没有生成目标文件。

如果您想知道原始警告的含义,那么您需要向我们询问该警告。

【讨论】:

    【解决方案2】:

    我刚遇到这个问题。混淆的真正根源在于 Microsoft Visual Studio 列出了
    错误 C2220:警告视为错误 - 未生成“对象”文件
    与警告分开行 - 有时甚至在警告之前 - 因此,错误与列出的警告相关并不立即明显。

    修复列出的所有警告以解决此问题。

    【讨论】:

    • 警告似乎是“没有生成'对象'文件”尤其令人困惑,这似乎是OP陷入的陷阱。
    • 就我而言,我还有很多其他警告,当我为这些警告添加 /wd 时,此警告消失了。作为旁注,我不认为使用/wd2220 可以忽略C2220。编译器 (VS2010) 会在命令行中生成一个警告,称其为不正确的值”
    【解决方案3】:

    我将解决根本问题而不是编译问题。

    any 进程的环境变量会在新进程启动时从其父进程的环境变量中复制。从那时起,唯一可以修改它们的就是您自己的流程。

    实际上,这意味着转到 Windows 对话框更改环境变量不会更改任何现有进程的这些值。这些更改将应用​​于explorer.exe 进程,然后是从资源管理器启动的任何新进程。

    Windows 应用程序可以通过一种可能的方式获得资源管理器对环境变量所做更改的通知。详情请见How to modify the PATH variable definitely through the command line in Windows

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-04
      相关资源
      最近更新 更多