【问题标题】:Error compiling Qt application directly with g++ on Ubuntu在 Ubuntu 上直接使用 g++ 编译 Qt 应用程序时出错
【发布时间】:2016-08-16 10:49:59
【问题描述】:

我尝试按照书中的示例使用 Qt 学习 C++。在包括 Qt 在内的第一个示例中,我遇到了编译错误:

$ g++ -Wall qtdemo.cpp
qtdemo.cpp:1:19: fatal error: QString: No such file or directory
compilation terminated.

如果我不包含任何 Qt 库,g++ 可以正常工作。 我尝试使用 Qt Creator 运行相同的程序,如果我执行“Qt Console 应用程序”,它可以工作,但如果我执行“Plain C++ 应用程序”则显示错误。 我试图在 g++ 命令、不同配置等之后给出QString 的路径。似乎 g++ 根本看不到 Qt。 我什至在 Ubuntu 16.04 Qt4 上已经存在的基础上安装了 Qt5。 当我检查我是否安装了 Qt 时,看起来一切都很好:

$ locate QString
/opt/Qt5.7.0/5.7/Src/qtbase/include/QtCore/QString
...
/opt/Qt5.7.0/5.7/gcc_64/include/QtCore/QString
...
/usr/include/qt4/QtCore/QString
...

$ qmake -v
QMake version 2.01a
Using Qt version 4.8.7 in /usr/lib/x86_64-linux-gnu

我尝试运行的代码:

#include <QString>
#include <QTextStream>

QTextStream cout(stdout);
QTextStream cin(stdin);

int main() {
        QString s1("This "), s2("is s "), s3("string");
        s1 += s2; //concatenation
        QString s4 = s1+s3;
        cout << s4 << endl;
        cout << "The length of that string is " << s4.length() << endl;
        cout << "Enter a sentence with withspace: " << endl;
        s2 = cin.readLine();
        cout << "Here is your sentence: \n" << s2 << endl;
        cout << "The length of your sentnce is: " << s2.length() << endl;
        return 0;
}

我不知道如何使用 g++ 使 Qt 应用程序在命令行中运行以及错误来自何处。

【问题讨论】:

  • /opt 下的东西(通常)不在通常的库中或包含链接器的文件搜索路径,因此您必须提供适当的编译器选项。但是,只需使用 qmakeqbs 来管理您的 Qt 项目,因为您不想手动做这些事情......

标签: c++ qt ubuntu


【解决方案1】:

对于构建 qt 项目(也可以是包含 qt 库的 c++ 项目),我强烈建议查看 qmake 工具(例如,http://doc.qt.io/qt-4.8/qmake-manual.html 用于 qt4.8 或 http://doc.qt.io/qt-5/qmake-manual.html 用于 qt5)。

如手册所说

qmake 是一个帮助简化跨平台开发项目的构建过程的工具

对于您的代码,我唯一需要编译的就是将代码放入 main.cpp 文件中,然后我就这样做了

qmake -project
qmake
make

并获得了一个工作可执行文件。

make 命令期间,您还将看到它执行的完整命令,类似于

g++ -c -m64 -pipe -O2 -Wall -W -D_REENTRANT -fPIE -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++-64 -I. -I. -I/usr/include/qt5 -I/usr/include/qt5/QtGui -I/usr/include/qt5/QtCore -I. -o main.o main.cc

其中包含各种包含路径以及其他内容,但除非您有非常具体的事情要做,否则我(个人)会避免手动做事。

即使您需要进行特定的自定义,也可以通过在执行qmake -project 时创建的.pro 文件来完成。您可以查看这些类型文件的文档

如果这有帮助,请告诉我

【讨论】:

    【解决方案2】:

    编译器必须知道 Qt 库,然后在编译后你必须链接它们。而不是g++ -Wall qtdemo.cpp 至少尝试g++ -Wall -lQtGui -lQtCore -lpthread qtdemo.cpp

    如果-lQtGui -lQtCore -lpthread 未知,则必须使用-I 选项设置路径

    查看此线程以获得有效的解决方案,尤其是 Quent42340 发布的 qmake makefile:

    Can I use Qt without qmake or Qt Creator?

    【讨论】:

      猜你喜欢
      • 2016-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-01
      • 2011-01-20
      • 1970-01-01
      • 2016-07-09
      • 1970-01-01
      相关资源
      最近更新 更多