静态 QT 编译问题
Posted
技术标签:
【中文标题】静态 QT 编译问题【英文标题】:Static QT Compilation problems 【发布时间】:2017-03-28 17:18:48 【问题描述】:我在 QT Creator 中创建了一个应用程序,并试图用它构建一个可分发的 mac 应用程序,但我不断收到此错误:
./mainwindow.h:4:10: fatal error: 'QMainWindow' file not found
#include <QMainWindow>
^
1 error generated.
首先我cd
到projects build目录文件夹并调用qmake的静态编译版本:
/Volumes/StaticQT/qt-everywhere-opensource-src-5.8.0/qtbase/bin/qmake -config release /PathOfFoo.pro
然后我运行make
并收到上面突出显示的错误。我试过添加:
INCLUDEPATH = "/Volumes/BackupSG/StaticQT/qt-everywhere-opensource-src-5.8.0/qtbase/include"
到 .pro 文件以指定它应该从哪里绘制内容。我不确定是 qmake/make 没有找到正确的目录还是什么。
注意:我对非静态版本也有同样的问题。
关于如何解决这个问题的任何想法?我已经阅读了其他几个关于此的问题,但它们大多都是针对旧版本的 qt。
编辑:原始问题已通过将QT += widgets
添加到 .pro 文件的答案解决,并在遇到另一个类似问题之前进一步编译:
/$paths/ui_mainwindow.h:13:10: fatal error: 'QtGui/QAction' file not found
#include <QtGui/QAction>
^
1 error generated.
根据this question 上已接受答案的cmets,make 失败的步骤确实有-I<PATH_TO_QT5_INSTALL>/QtWidgets
。
【问题讨论】:
QMainWindow 不在 /qtbase/include 文件夹中。 查看编辑后的答案。 【参考方案1】:该问题与静态 Qt 无关。您的项目文件不包含必要的widgets
模块:
# Foo.pro
QT += widgets
TEMPLATE = app
TARGET = Foo
SOURCES += ...
HEADERS += ...
# etc
修复此问题后,重新运行 qmake,因为不会自动检测到对项目文件的此类更改。
如果你想支持 Qt 4,你会想要类似的东西:
QT += gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
我已经尝试添加
INCLUDEPATH = "/Volumes/BackupSG/StaticQT/qt-everywhere-opensource-src-5.8.0/qtbase/include"
不要那样做。你有 qmake 为你做这件事。如果没有,则仅表示您的项目文件已损坏。
最后,<QtGui/QAction>
路径无效。这是 Qt 4 的保留,但即使在那里也没有必要:它应该只是 <QAction>
。将其更改为 <QAction>
即可。如果生成了该文件(看起来像),则您正在尝试重用 Qt 4 的uic
输出:不要那样做。 Qt 5 的uic
永远不会生成该行。将.ui
文件添加到项目中,去掉ui_foo.h
文件:
# Foo.pro
...
FORMS += foo.ui bar.ui
根据经验,您的项目应该只包含两种形式的 Qt 包括:
#include <QtModule>
#include <QClass>
#include <QtModule/QClass> // Don't! Use <QClass> instead
#include <QtModule/qclass.h> // Don't! Use <QClass> instead
#include <qclass.h> // Don't! Use <QClass> instead
请注意,Qt 自己的源代码和生成的输出违反了该规则,但这样做是出于技术原因,不适用于您自己编写的代码。
【讨论】:
以上是关于静态 QT 编译问题的主要内容,如果未能解决你的问题,请参考以下文章