【问题标题】:Unrecognized Command Line Option '-WI'无法识别的命令行选项“-WI”
【发布时间】:2023-11-05 23:25:01
【问题描述】:

我正在尝试为大学设置 Qt,但遇到了一些问题。我正在运行 Windows 8,我不确定 Qt 或 QtCreator 的哪个版本,但不是最新的 - 我们获得了版本安装程序,所以我们必须使用这个,尽管我确实在 QtCreator 设置之前自己安装了最新的 MinGW。

我在 QtCreator 中尝试了一些演示代码,但在尝试运行以下代码时出现错误“无法识别的命令行选项”-WI。

#include <QtCore/QCoreApplication>
#include <QtGui/QMessageBox>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QMessageBox msgBox;
    msgBox.setText("This is some text.");
    msgBox.exec();


    return a.exec();
}

我需要完成我的任务,当我遇到所有这些奇怪的错误时,我不确定我该怎么做。 任何帮助将不胜感激。

提前致谢!

* 编辑 *

这是我在构建过程中可以在 QtCreator 中找到的错误输出。

Running build steps for project TestProject...
Configuration unchanged, skipping qmake step.
Starting: "C:/MinGW/bin/mingw32-make.exe" -w 
mingw32-make: Entering directory 'C:/Users/Nick/Documents/Qt Projects/TestProject-build-desktop' 
C:/MinGW/bin/mingw32-make -f Makefile.Debug 
mingw32-make[1]: Entering directory 'C:/Users/Nick/Documents/Qt Projects/TestProject-build-desktop' 
g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -Wl,-subsystem,console -mthreads -Wl -o debug\TestProject.exe debug/main.o -L"c:\Qt\2010.04\qt\lib" -lQtCored4 
Makefile.Debug:73: recipe for target 'debug\TestProject.exe' failed 
mingw32-make[1]: Leaving directory 'C:/Users/Nick/Documents/Qt Projects/TestProject-build-desktop' 
Makefile:34: recipe for target 'debug' failed 
mingw32-make: Leaving directory 'C:/Users/Nick/Documents/Qt Projects/TestProject-build-desktop' 
g++: error: unrecognized command line option '-Wl' 
mingw32-make[1]: *** [debug\TestProject.exe] Error 1 
mingw32-make: *** [debug] Error 2 
The process "C:/MinGW/bin/mingw32-make.exe" exited with code %2.
Error while building project TestProject (target: Desktop)
When executing build step 'Make'

以下是 QtCreator 生成的 .pro 文件的内容:

QT       += core

QT       -= gui

TARGET = TestProject
CONFIG   += console
CONFIG   -= app_bundle

TEMPLATE = app


SOURCES += main.cpp

【问题讨论】:

  • -Wl 是使用 gcc “作为链接器”时传递给链接器的参数。如果没有确切地看到链接器命令是什么,很难确切地说出发生了什么。
  • 我怎样才能把那个给你?
  • 不确定,我不太使用 Qt。
  • 我编辑了问题并添加到控制台输出中,如果对您有帮助的话?
  • 您可以通过“关于 Qt Creator”对话框找到 Qt Creator 版本,通过 Preferences->Build & Run->Qt Versions 找到配置的 Qt 版本。此外,您的代码将无法运行,因为QMessageBox 需要一个 QApplication,而不仅仅是一个 QCoreApplication。

标签: c++ qt mingw


【解决方案1】:

正如 Mats 所说,问题在于命令行中的额外 -Wl

这是由于 QT conf 文件中的错误,幸运的是,这可以“永久”(本地)修复。

您需要编辑这些文件中的一个(可能两个)(通常在C:\Qt\2010.02\qt\mkspecs):

  • mkspecs\default\qmake.conf
  • mkspecs\win32-g++\qmake.conf

改变这个:

QMAKE_LFLAGS        = -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc
QMAKE_LFLAGS_EXCEPTIONS_ON = -mthreads -Wl

到这里:

QMAKE_LFLAGS        = -Wl,-enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc
QMAKE_LFLAGS_EXCEPTIONS_ON = -mthreads

因为不知何故,第一行开头的 -Wl, 错误地位于第二行的末尾。

在此编辑之后,如果您清理然后重新构建您的项目,您将不再看到错误。

注意事项:

  • 同样的错误也会导致 this issue,因此感谢 leemes 在那里的回答)
  • 我相信是 fixed in Qt 从 4.7 版开始

【讨论】:

    【解决方案2】:

    问题很明显:

    g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -Wl,-subsystem,console -mthreads -Wl -o debug\TestProject.exe debug/main.o -L"c:\Qt\2010.04 \qt\lib" -lQtCored4

    我不确定它是如何编译的,但对我来说它看起来像一个带有-Wl${somestuff} 的makefile,并且由于某种原因没有定义${somestuff}。要么这样,要么链接命令的命令行中有一个虚假的-Wl,但这似乎不太可能。

    【讨论】:

    • 嗯,这不是我在 Makefile 中而是在 Makefile.Debug 中找到的。 LFLAGS = -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -Wl,-subsystem,console -mthreads -Wl
    • 对,所以去掉最后多余的-Wl(但我希望生成文件,所以生成器可能有一些“空变量”,它以-Wl开头。
    • 是的,生成了Makefile。而且我不确定如何永久解决它。