【问题标题】:Can't get a Qt Hello World to work无法让 Qt Hello World 工作
【发布时间】:2013-09-05 07:47:13
【问题描述】:

我使用this official guide 提供的说明在 OSX Lion 上编译了 Qt。然后我尝试用gcc hello_world.cpp -o hello_world编译下面的Hello World@

#include <QApplication>

int main(int argc, char **argv)
{
    QApplication app (argc, argv);
    return app.exec();
}

我遇到以下错误:

hello_world.cpp:1:10: fatal error: 'QApplication' file not found
#include <QApplication>
         ^
1 error generated.

【问题讨论】:

  • 您不必将包含和 lib 目录的路径传递给编译器吗?
  • 如此神秘的错误信息......人们应该如何理解它们的意思?
  • @Viclib 您没有使用 QtCreator 是否有特定原因?
  • 如果您以前从未在没有 IDE 的情况下使用过 C++,而且您没有鼠标,那么您之前是如何通过 IDE 使用 C++ 的?
  • 如果你正在编译 C++ 程序,你应该改用 g++ 编译器。

标签: c++ macos gcc compiler-construction


【解决方案1】:

试试#include &lt;QtGui/QApplication&gt;

【讨论】:

    【解决方案2】:

    使用 gcc 的 -I 选项提供额外的包含位置。

    gcc hello_world.cpp -I/path-to-qt/include -o hello_world
    

    如果你这样使用它,你必须像这样使用你的包含:

    #include <QtGui/QApplication>
    

    如果您希望您的包含更短,如 #include &lt;QApplication&gt;,您可以提供多个包含文件夹,如下所示:

    gcc hello_world.cpp -I/path-to-qt/include/QtCore -I/path-to-qt/include/QtGui -o hello_world
    

    但这还不是全部。您还必须提供库目录以及要链接到的库,方法如下:

    gcc hello_world.cpp -I/path-to-qt/include/QtCore -I/path-to-qt/include/QtGui -o hello_world -L/path-to-qt/lib -lQtCore -lQtGui
    

    使用 g++ 也更好,因为您使用的是 C++。

    g++ hello_world.cpp -I/path-to-qt/include/QtCore -I/path-to-qt/include/QtGui -o hello_world -L/path-to-qt/lib -lQtCore -lQtGui
    

    【讨论】:

    • 我不确定库的名称,它们可以是 QtCore 或 QtCore4
    【解决方案3】:

    试试g++ -I&lt;path_to_include_directory&gt; -L&lt;path_to_library_dir&gt; -lQtCore

    例如,在我的 Debian 中,我会这样做:g++ -I/usr/local/include/Qt4 -L/usr/local/lib -lQtCore -lQtGui whatever.cpp

    编辑:感谢@erelender 指出QApplicationQtGui 库中,它依赖于QtCore

    【讨论】:

    • 另外,如果您使用Qt SDKQtCreator,IDE 可能会为您找到正确的路径并编译程序。
    • QApplication在QtGui库中,依赖于QtCore库。
    • 那么它应该是-lQtCore -lQtGui 或者这些库的名称。我认为我从源代码构建的那些最后没有版本号,但我不确定。
    【解决方案4】:

    如果您尝试使用 -I 标志为 gcc 添加额外的包含路径怎么办?比如:

    gcc -I/usr/local/Qt-5.1.1/include hello_world.cpp -o hello_world
    

    【讨论】:

    • -I 后面不能有空格
    【解决方案5】:

    不确定 mac 中的路径,但在 Linux 上是 QApplication 类 在以下位置定义(qt4)

    /usr/include/qt4/QtGui/qwindowdefs.h
    

    Mac 上有类似的东西吗?

    如果您是从命令行构建,则可以使用以下开关来包含带有 gcc 的头文件

    -I<path to .h file>
    

    【讨论】:

    • 是的,我在/usr/local/Qt-5.1.1/include/QtGui/qwindowdefs.h 有这些。我不确定我该告诉 GCC 什么,以便他找到。
    • 使用 -I 包含 .h 文件作为 gcc 命令行的切换
    猜你喜欢
    • 1970-01-01
    • 2018-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多