Qt5 静态链接在 Ubuntu Linux 上失败
Qt5 static linking fails on Ubuntu Linux
这是我所做的:
1. 下载资源
2. ./configure -static -prefix /home/user/build/qt-static/build -qt-xcb
3. make -j3
4. make install
5. 经过1h的搭建,我做了一个简单的test.cpp:
#include <QtGui>
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
QMainWindow window;
window.resize(250, 150);
window.setWindowTitle("Test");
window.show();
return app.exec();
}
创建了项目文件:/home/user/build/final/bin/qmake -project
TEMPLATE = app
TARGET = test
INCLUDEPATH += . # missing path ?
# I also tried adding CONFIG += widgets or CONFIG += static, both resulting in the same errors
SOURCES += test.cpp
创建了一个 Makefile:/home/user/build/final/bin/qmake *pro
Makefile 的一部分:
#############################################################################
# Makefile for building: stat
# Generated by qmake (3.0) (Qt 5.7.1)
# Project: stat.pro
# Template: app
# Command: /home/user/build/final/bin/qmake -config release -o Makefile stat.pro
#############################################################################
MAKEFILE = Makefile
####### Compiler, tools and options
CC = gcc
CXX = g++
DEFINES = -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB
CFLAGS = -pipe -O2 -Wall -W -D_REENTRANT -fPIC $(DEFINES)
CXXFLAGS = -pipe -O2 -std=gnu++11 -Wall -W -D_REENTRANT -fPIC $(DEFINES)
INCPATH = -I. -I. -I../build/final/include -I../build/final/include/QtGui -I../build/final/include/QtCore -I. -I../build/final/mkspecs/linux-g++
QMAKE = /home/user/build/final/bin/qmake
DEL_FILE = rm -f
CHK_DIR_EXISTS= test -d
MKDIR = mkdir -p
COPY = cp -f
COPY_FILE = cp -f
COPY_DIR = cp -f -R
INSTALL_FILE = install -m 644 -p
INSTALL_PROGRAM = install -m 755 -p
INSTALL_DIR = cp -f -R
DEL_FILE = rm -f
SYMLINK = ln -f -s
DEL_DIR = rmdir
MOVE = mv -f
TAR = tar -cf
COMPRESS = gzip -9f
DISTNAME = stat1.0.0
DISTDIR = /home/user/stat/.tmp/stat1.0.0
LINK = g++
LFLAGS = -Wl,-O1
LIBS = $(SUBLIBS) -L/home/user/build/final/lib -L/home/user/build/final/plugins/platforms -lqxcb -L/home/user/build/final/plugins/xcbglintegrations -lqxcb-egl-integration -lqxcb-glx-integration -lxcb-glx -lQt5XcbQpa -lSM -lICE -lxcb-static -L/home/user/build/final/plugins/imageformats -lqdds -lqicns -lqico -lqtga -lqtiff -lqwbmp -lqwebp -L/home/user/build/final/plugins/egldeviceintegrations -lqeglfs-x11-integration -lX11-xcb -lxcb -lQt5EglDeviceIntegration -lQt5PlatformSupport -lQt5DBus -lqtfreetype -lXext -lX11 -lQt5Gui -lqtpng -lqtharfbuzzng -lQt5Core -lz -lqtpcre -lm -ldl -lrt -lEGL -lGL -lpthread
AR = ar cqs
RANLIB =
SED = sed
STRIP = strip
####### Output directory
OBJECTS_DIR = ./
####### Files
SOURCES = test.cpp /home/user/stat/stat_plugin_import.cpp
OBJECTS = test.o \
stat_plugin_import.o
DIST = ../build/final/mkspecs/features/spec_pre.prf \
../build/final/mkspecs/common/unix.conf \
../build/final/mkspecs/common/linux.conf \
../build/final/mkspecs/common/sanitize.conf \
../build/final/mkspecs/common/gcc-base.conf \
../build/final/mkspecs/common/gcc-base-unix.conf \
../build/final/mkspecs/common/g++-base.conf \
../build/final/mkspecs/common/g++-unix.conf \
../build/final/mkspecs/qconfig.pri \
../build/final/mkspecs/modules/qt_lib_3dcore.pri \
#CUT
../build/final/mkspecs/features/qt_config.prf \
../build/final/mkspecs/linux-g++/qmake.conf \
../build/final/mkspecs/features/spec_post.prf \
.qmake.stash \
../build/final/mkspecs/features/exclusive_builds.prf \
../build/final/mkspecs/features/toolchain.prf \
../build/final/mkspecs/features/default_pre.prf \
../build/final/mkspecs/features/resolve_config.prf \
../build/final/mkspecs/features/default_post.prf \
../build/final/mkspecs/features/warn_on.prf \
../build/final/mkspecs/features/qt.prf \
../build/final/mkspecs/features/resources.prf \
../build/final/mkspecs/features/moc.prf \
../build/final/mkspecs/features/unix/opengl.prf \
../build/final/mkspecs/features/unix/thread.prf \
../build/final/mkspecs/features/file_copies.prf \
../build/final/mkspecs/features/testcase_targets.prf \
../build/final/mkspecs/features/exceptions.prf \
../build/final/mkspecs/features/yacc.prf \
../build/final/mkspecs/features/lex.prf \
stat.pro test.cpp
QMAKE_TARGET = stat
DESTDIR =
TARGET = stat
first: all
####### Build rules
$(TARGET): /home/user/build/final/lib/libQt5Gui.a /home/user/build/final/lib/libQt5Core.a $(OBJECTS)
$(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJCOMP) $(LIBS)
Makefile: stat.pro ../build/final/mkspecs/linux-g++/qmake.conf ../build/final/mkspecs/features/spec_pre.prf \
../build/final/mkspecs/common/unix.conf \
../build/final/mkspecs/common/linux.conf \
../build/final/mkspecs/common/sanitize.conf \
../build/final/mkspecs/common/gcc-base.conf \
../build/final/mkspecs/common/gcc-base-unix.conf \
../build/final/mkspecs/common/g++-base.conf \
../build/final/mkspecs/common/g++-unix.conf \
../build/final/mkspecs/qconfig.pri \
../build/final/mkspecs/modules/qt_lib_3dcore.pri \
../build/final/mkspecs/modules/qt_lib_3dcore_private.pri \
../build/final/mkspecs/modules/qt_lib_3dextras.pri \
../build/final/mkspecs/modules/qt_lib_3dextras_private.pri \
../build/final/mkspecs/modules/qt_lib_3dinput.pri \
../build/final/mkspecs/modules/qt_lib_3dinput_private.pri \
../build/final/mkspecs/modules/qt_lib_3dlogic.pri \
../build/final/mkspecs/modules/qt_lib_3dlogic_private.pri \
../build/final/mkspecs/modules/qt_lib_3dquick.pri \
#CUT
../build/final/mkspecs/features/yacc.prf \
../build/final/mkspecs/features/lex.prf \
stat.pro \
../build/final/lib/libQt5Gui.prl \
../build/final/lib/libQt5Core.prl \
../build/final/plugins/platforms/libqxcb.prl \
../build/final/plugins/xcbglintegrations/libqxcb-egl-integration.prl \
../build/final/plugins/xcbglintegrations/libqxcb-glx-integration.prl \
../build/final/plugins/imageformats/libqdds.prl \
../build/final/plugins/imageformats/libqicns.prl \
../build/final/plugins/imageformats/libqico.prl \
../build/final/plugins/imageformats/libqtga.prl \
../build/final/plugins/imageformats/libqtiff.prl \
../build/final/plugins/imageformats/libqwbmp.prl \
../build/final/plugins/imageformats/libqwebp.prl \
../build/final/plugins/egldeviceintegrations/libqeglfs-x11-integration.prl
$(QMAKE) -config release -o Makefile stat.pro
../build/final/mkspecs/features/spec_pre.prf:
../build/final/mkspecs/common/unix.conf:
../build/final/mkspecs/common/linux.conf:
../build/final/mkspecs/common/sanitize.conf:
../build/final/mkspecs/common/gcc-base.conf:
../build/final/mkspecs/common/gcc-base-unix.conf:
../build/final/mkspecs/common/g++-base.conf:
../build/final/mkspecs/common/g++-unix.conf:
../build/final/mkspecs/qconfig.pri:
../build/final/mkspecs/modules/qt_lib_3dcore.pri:
#CUT
../build/final/mkspecs/modules/qt_plugin_qtuiotouchplugin.pri:
../build/final/mkspecs/modules/qt_plugin_qtvirtualkeyboardplugin.pri:
../build/final/mkspecs/modules/qt_plugin_qwbmp.pri:
../build/final/mkspecs/modules/qt_plugin_qwebp.pri:
../build/final/mkspecs/modules/qt_plugin_qxcb-egl-integration.pri:
../build/final/mkspecs/modules/qt_plugin_qxcb-glx-integration.pri:
../build/final/mkspecs/modules/qt_plugin_qxcb.pri:
../build/final/mkspecs/features/qt_functions.prf:
../build/final/mkspecs/features/qt_config.prf:
../build/final/mkspecs/linux-g++/qmake.conf:
../build/final/mkspecs/features/spec_post.prf:
.qmake.stash:
../build/final/mkspecs/features/exclusive_builds.prf:
../build/final/mkspecs/features/toolchain.prf:
../build/final/mkspecs/features/default_pre.prf:
../build/final/mkspecs/features/resolve_config.prf:
../build/final/mkspecs/features/default_post.prf:
../build/final/mkspecs/features/warn_on.prf:
../build/final/mkspecs/features/qt.prf:
../build/final/mkspecs/features/resources.prf:
../build/final/mkspecs/features/moc.prf:
../build/final/mkspecs/features/unix/opengl.prf:
../build/final/mkspecs/features/unix/thread.prf:
../build/final/mkspecs/features/file_copies.prf:
../build/final/mkspecs/features/testcase_targets.prf:
../build/final/mkspecs/features/exceptions.prf:
../build/final/mkspecs/features/yacc.prf:
../build/final/mkspecs/features/lex.prf:
stat.pro:
../build/final/lib/libQt5Gui.prl:
../build/final/lib/libQt5Core.prl:
../build/final/plugins/platforms/libqxcb.prl:
../build/final/plugins/xcbglintegrations/libqxcb-egl-integration.prl:
../build/final/plugins/xcbglintegrations/libqxcb-glx-integration.prl:
../build/final/plugins/imageformats/libqdds.prl:
../build/final/plugins/imageformats/libqicns.prl:
../build/final/plugins/imageformats/libqico.prl:
../build/final/plugins/imageformats/libqtga.prl:
../build/final/plugins/imageformats/libqtiff.prl:
../build/final/plugins/imageformats/libqwbmp.prl:
../build/final/plugins/imageformats/libqwebp.prl:
../build/final/plugins/egldeviceintegrations/libqeglfs-x11-integration.prl:
qmake: FORCE
@$(QMAKE) -config release -o Makefile stat.pro
qmake_all: FORCE
all: Makefile $(TARGET)
dist: distdir FORCE
(cd `dirname $(DISTDIR)` && $(TAR) $(DISTNAME).tar $(DISTNAME) && $(COMPRESS) $(DISTNAME).tar) && $(MOVE) `dirname $(DISTDIR)`/$(DISTNAME).tar.gz . && $(DEL_FILE) -r $(DISTDIR)
distdir: FORCE
@test -d $(DISTDIR) || mkdir -p $(DISTDIR)
$(COPY_FILE) --parents $(DIST) $(DISTDIR)/
$(COPY_FILE) --parents test.cpp $(DISTDIR)/
clean: compiler_clean
-$(DEL_FILE) $(OBJECTS)
-$(DEL_FILE) *~ core *.core
distclean: clean
-$(DEL_FILE) $(TARGET)
-$(DEL_FILE) /home/user/stat/stat_plugin_import.cpp .qmake.stash
-$(DEL_FILE) Makefile
####### Sub-libraries
mocclean: compiler_moc_header_clean compiler_moc_source_clean
mocables: compiler_moc_header_make_all compiler_moc_source_make_all
check: first
benchmark: first
compiler_rcc_make_all:
compiler_rcc_clean:
compiler_moc_header_make_all:
compiler_moc_header_clean:
compiler_moc_source_make_all:
compiler_moc_source_clean:
compiler_yacc_decl_make_all:
compiler_yacc_decl_clean:
compiler_yacc_impl_make_all:
compiler_yacc_impl_clean:
compiler_lex_make_all:
compiler_lex_clean:
compiler_clean:
####### Compile
test.o: test.cpp ../build/final/include/QtGui/QtGui \
../build/final/include/QtGui/QtGuiDepends \
../build/final/include/QtCore/QtCore \
../build/final/include/QtCore/QtCoreDepends \
../build/final/include/QtCore/qabstractanimation.h \
../build/final/include/QtCore/qobject.h \
../build/final/include/QtCore/qobjectdefs.h \
../build/final/include/QtCore/qnamespace.h \
../build/final/include/QtCore/qglobal.h \
../build/final/include/QtCore/qconfig.h \
../build/final/include/QtCore/qfeatures.h \
../build/final/include/QtCore/qsystemdetection.h \
../build/final/include/QtCore/qprocessordetection.h \
../build/final/include/QtCore/qcompilerdetection.h \
../build/final/include/QtCore/qtypeinfo.h \
../build/final/include/QtCore/qtypetraits.h \
#CUT
../build/final/include/QtGui/qtextobject.h \
../build/final/include/QtGui/qtextdocumentfragment.h \
../build/final/include/QtGui/qtextdocumentwriter.h \
../build/final/include/QtGui/qtextlist.h \
../build/final/include/QtGui/qtexttable.h \
../build/final/include/QtGui/qdesktopservices.h \
../build/final/include/QtGui/qvalidator.h \
../build/final/include/QtGui/qtguiversion.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o test.o test.cpp
stat_plugin_import.o: /home/user/stat/stat_plugin_import.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o stat_plugin_import.o /home/user/stat/stat_plugin_import.cpp
####### Install
install: FORCE
uninstall: FORCE
FORCE:
make
导致错误:
Makefile:1169: warning: overriding commands for target `stat_plugin_import.o'
Makefile:808: warning: ignoring old commands for target `stat_plugin_import.o'
g++ -c -pipe -O2 -std=gnu++11 -Wall -W -D_REENTRANT -fPIC -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -I. -I. -I../build/final/include -I../build/final/include/QtGui -I../build/final/include/QtCore -I. -I../build/final/mkspecs/linux-g++ -o test.o test.cpp
test.cpp: In function ‘int main(int, char**)’:
test.cpp:3:22: error: variable ‘QApplication app’ has initializer but incomplete type
QApplication app(argc, argv);
^
test.cpp:4:5: error: ‘QMainWindow’ was not declared in this scope
QMainWindow window;
^
test.cpp:4:17: error: expected ‘;’ before ‘window’
QMainWindow window;
^
test.cpp:5:5: error: ‘window’ was not declared in this scope
window.resize(250, 150);
^
make: *** [test.o] Error 1
于是看了官方文档,尝试了如下命令:
PATH=/home/user/build/final/bin:$PATH
export PATH
qmake -config release
make
但是我遇到了与上面相同的错误
将 #include <QtGui>
更改为 #include <QApplication>
和 #include <QMainWindow>
returns:
g++ -c -pipe -O2 -std=gnu++11 -Wall -W -D_REENTRANT -fPIC -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -I. -I. -I../build/final/include -I../build/final/include/QtGui -I../build/final/include/QtCore -I. -I../build/final/mkspecs/linux-g++ -o test.o test.cpp
test.cpp:2:24: fatal error: QApplication: No such file or directory
#include <QApplication>
^
compilation terminated.
make: *** [test.o] Error 1
在此先感谢您的帮助
改变
#include <QtGui>
到
#include <QApplication>
#include <QMainWindow>
AlexanderXV 的评论很好,因为它告诉链接器使用 QtWidgets 并为编译器设置正确的路径。在Qt5中,.pro文件中的命令为:
QT += widgets
来源:https://doc.qt.io/qt-5/qtwidgets-index.html
加上:
您可以使用单个 #include <QtWidgets>
,它包括 QtWidgets 中的所有其他头文件。
这是我所做的:
1. 下载资源
2. ./configure -static -prefix /home/user/build/qt-static/build -qt-xcb
3. make -j3
4. make install
5. 经过1h的搭建,我做了一个简单的test.cpp:
#include <QtGui>
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
QMainWindow window;
window.resize(250, 150);
window.setWindowTitle("Test");
window.show();
return app.exec();
}
创建了项目文件:
/home/user/build/final/bin/qmake -project
TEMPLATE = app TARGET = test INCLUDEPATH += . # missing path ? # I also tried adding CONFIG += widgets or CONFIG += static, both resulting in the same errors SOURCES += test.cpp
创建了一个 Makefile:
/home/user/build/final/bin/qmake *pro
Makefile 的一部分:############################################################################# # Makefile for building: stat # Generated by qmake (3.0) (Qt 5.7.1) # Project: stat.pro # Template: app # Command: /home/user/build/final/bin/qmake -config release -o Makefile stat.pro ############################################################################# MAKEFILE = Makefile ####### Compiler, tools and options CC = gcc CXX = g++ DEFINES = -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB CFLAGS = -pipe -O2 -Wall -W -D_REENTRANT -fPIC $(DEFINES) CXXFLAGS = -pipe -O2 -std=gnu++11 -Wall -W -D_REENTRANT -fPIC $(DEFINES) INCPATH = -I. -I. -I../build/final/include -I../build/final/include/QtGui -I../build/final/include/QtCore -I. -I../build/final/mkspecs/linux-g++ QMAKE = /home/user/build/final/bin/qmake DEL_FILE = rm -f CHK_DIR_EXISTS= test -d MKDIR = mkdir -p COPY = cp -f COPY_FILE = cp -f COPY_DIR = cp -f -R INSTALL_FILE = install -m 644 -p INSTALL_PROGRAM = install -m 755 -p INSTALL_DIR = cp -f -R DEL_FILE = rm -f SYMLINK = ln -f -s DEL_DIR = rmdir MOVE = mv -f TAR = tar -cf COMPRESS = gzip -9f DISTNAME = stat1.0.0 DISTDIR = /home/user/stat/.tmp/stat1.0.0 LINK = g++ LFLAGS = -Wl,-O1 LIBS = $(SUBLIBS) -L/home/user/build/final/lib -L/home/user/build/final/plugins/platforms -lqxcb -L/home/user/build/final/plugins/xcbglintegrations -lqxcb-egl-integration -lqxcb-glx-integration -lxcb-glx -lQt5XcbQpa -lSM -lICE -lxcb-static -L/home/user/build/final/plugins/imageformats -lqdds -lqicns -lqico -lqtga -lqtiff -lqwbmp -lqwebp -L/home/user/build/final/plugins/egldeviceintegrations -lqeglfs-x11-integration -lX11-xcb -lxcb -lQt5EglDeviceIntegration -lQt5PlatformSupport -lQt5DBus -lqtfreetype -lXext -lX11 -lQt5Gui -lqtpng -lqtharfbuzzng -lQt5Core -lz -lqtpcre -lm -ldl -lrt -lEGL -lGL -lpthread AR = ar cqs RANLIB = SED = sed STRIP = strip ####### Output directory OBJECTS_DIR = ./ ####### Files SOURCES = test.cpp /home/user/stat/stat_plugin_import.cpp OBJECTS = test.o \ stat_plugin_import.o DIST = ../build/final/mkspecs/features/spec_pre.prf \ ../build/final/mkspecs/common/unix.conf \ ../build/final/mkspecs/common/linux.conf \ ../build/final/mkspecs/common/sanitize.conf \ ../build/final/mkspecs/common/gcc-base.conf \ ../build/final/mkspecs/common/gcc-base-unix.conf \ ../build/final/mkspecs/common/g++-base.conf \ ../build/final/mkspecs/common/g++-unix.conf \ ../build/final/mkspecs/qconfig.pri \ ../build/final/mkspecs/modules/qt_lib_3dcore.pri \ #CUT ../build/final/mkspecs/features/qt_config.prf \ ../build/final/mkspecs/linux-g++/qmake.conf \ ../build/final/mkspecs/features/spec_post.prf \ .qmake.stash \ ../build/final/mkspecs/features/exclusive_builds.prf \ ../build/final/mkspecs/features/toolchain.prf \ ../build/final/mkspecs/features/default_pre.prf \ ../build/final/mkspecs/features/resolve_config.prf \ ../build/final/mkspecs/features/default_post.prf \ ../build/final/mkspecs/features/warn_on.prf \ ../build/final/mkspecs/features/qt.prf \ ../build/final/mkspecs/features/resources.prf \ ../build/final/mkspecs/features/moc.prf \ ../build/final/mkspecs/features/unix/opengl.prf \ ../build/final/mkspecs/features/unix/thread.prf \ ../build/final/mkspecs/features/file_copies.prf \ ../build/final/mkspecs/features/testcase_targets.prf \ ../build/final/mkspecs/features/exceptions.prf \ ../build/final/mkspecs/features/yacc.prf \ ../build/final/mkspecs/features/lex.prf \ stat.pro test.cpp QMAKE_TARGET = stat DESTDIR = TARGET = stat first: all ####### Build rules $(TARGET): /home/user/build/final/lib/libQt5Gui.a /home/user/build/final/lib/libQt5Core.a $(OBJECTS) $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJCOMP) $(LIBS) Makefile: stat.pro ../build/final/mkspecs/linux-g++/qmake.conf ../build/final/mkspecs/features/spec_pre.prf \ ../build/final/mkspecs/common/unix.conf \ ../build/final/mkspecs/common/linux.conf \ ../build/final/mkspecs/common/sanitize.conf \ ../build/final/mkspecs/common/gcc-base.conf \ ../build/final/mkspecs/common/gcc-base-unix.conf \ ../build/final/mkspecs/common/g++-base.conf \ ../build/final/mkspecs/common/g++-unix.conf \ ../build/final/mkspecs/qconfig.pri \ ../build/final/mkspecs/modules/qt_lib_3dcore.pri \ ../build/final/mkspecs/modules/qt_lib_3dcore_private.pri \ ../build/final/mkspecs/modules/qt_lib_3dextras.pri \ ../build/final/mkspecs/modules/qt_lib_3dextras_private.pri \ ../build/final/mkspecs/modules/qt_lib_3dinput.pri \ ../build/final/mkspecs/modules/qt_lib_3dinput_private.pri \ ../build/final/mkspecs/modules/qt_lib_3dlogic.pri \ ../build/final/mkspecs/modules/qt_lib_3dlogic_private.pri \ ../build/final/mkspecs/modules/qt_lib_3dquick.pri \ #CUT ../build/final/mkspecs/features/yacc.prf \ ../build/final/mkspecs/features/lex.prf \ stat.pro \ ../build/final/lib/libQt5Gui.prl \ ../build/final/lib/libQt5Core.prl \ ../build/final/plugins/platforms/libqxcb.prl \ ../build/final/plugins/xcbglintegrations/libqxcb-egl-integration.prl \ ../build/final/plugins/xcbglintegrations/libqxcb-glx-integration.prl \ ../build/final/plugins/imageformats/libqdds.prl \ ../build/final/plugins/imageformats/libqicns.prl \ ../build/final/plugins/imageformats/libqico.prl \ ../build/final/plugins/imageformats/libqtga.prl \ ../build/final/plugins/imageformats/libqtiff.prl \ ../build/final/plugins/imageformats/libqwbmp.prl \ ../build/final/plugins/imageformats/libqwebp.prl \ ../build/final/plugins/egldeviceintegrations/libqeglfs-x11-integration.prl $(QMAKE) -config release -o Makefile stat.pro ../build/final/mkspecs/features/spec_pre.prf: ../build/final/mkspecs/common/unix.conf: ../build/final/mkspecs/common/linux.conf: ../build/final/mkspecs/common/sanitize.conf: ../build/final/mkspecs/common/gcc-base.conf: ../build/final/mkspecs/common/gcc-base-unix.conf: ../build/final/mkspecs/common/g++-base.conf: ../build/final/mkspecs/common/g++-unix.conf: ../build/final/mkspecs/qconfig.pri: ../build/final/mkspecs/modules/qt_lib_3dcore.pri: #CUT ../build/final/mkspecs/modules/qt_plugin_qtuiotouchplugin.pri: ../build/final/mkspecs/modules/qt_plugin_qtvirtualkeyboardplugin.pri: ../build/final/mkspecs/modules/qt_plugin_qwbmp.pri: ../build/final/mkspecs/modules/qt_plugin_qwebp.pri: ../build/final/mkspecs/modules/qt_plugin_qxcb-egl-integration.pri: ../build/final/mkspecs/modules/qt_plugin_qxcb-glx-integration.pri: ../build/final/mkspecs/modules/qt_plugin_qxcb.pri: ../build/final/mkspecs/features/qt_functions.prf: ../build/final/mkspecs/features/qt_config.prf: ../build/final/mkspecs/linux-g++/qmake.conf: ../build/final/mkspecs/features/spec_post.prf: .qmake.stash: ../build/final/mkspecs/features/exclusive_builds.prf: ../build/final/mkspecs/features/toolchain.prf: ../build/final/mkspecs/features/default_pre.prf: ../build/final/mkspecs/features/resolve_config.prf: ../build/final/mkspecs/features/default_post.prf: ../build/final/mkspecs/features/warn_on.prf: ../build/final/mkspecs/features/qt.prf: ../build/final/mkspecs/features/resources.prf: ../build/final/mkspecs/features/moc.prf: ../build/final/mkspecs/features/unix/opengl.prf: ../build/final/mkspecs/features/unix/thread.prf: ../build/final/mkspecs/features/file_copies.prf: ../build/final/mkspecs/features/testcase_targets.prf: ../build/final/mkspecs/features/exceptions.prf: ../build/final/mkspecs/features/yacc.prf: ../build/final/mkspecs/features/lex.prf: stat.pro: ../build/final/lib/libQt5Gui.prl: ../build/final/lib/libQt5Core.prl: ../build/final/plugins/platforms/libqxcb.prl: ../build/final/plugins/xcbglintegrations/libqxcb-egl-integration.prl: ../build/final/plugins/xcbglintegrations/libqxcb-glx-integration.prl: ../build/final/plugins/imageformats/libqdds.prl: ../build/final/plugins/imageformats/libqicns.prl: ../build/final/plugins/imageformats/libqico.prl: ../build/final/plugins/imageformats/libqtga.prl: ../build/final/plugins/imageformats/libqtiff.prl: ../build/final/plugins/imageformats/libqwbmp.prl: ../build/final/plugins/imageformats/libqwebp.prl: ../build/final/plugins/egldeviceintegrations/libqeglfs-x11-integration.prl: qmake: FORCE @$(QMAKE) -config release -o Makefile stat.pro qmake_all: FORCE all: Makefile $(TARGET) dist: distdir FORCE (cd `dirname $(DISTDIR)` && $(TAR) $(DISTNAME).tar $(DISTNAME) && $(COMPRESS) $(DISTNAME).tar) && $(MOVE) `dirname $(DISTDIR)`/$(DISTNAME).tar.gz . && $(DEL_FILE) -r $(DISTDIR) distdir: FORCE @test -d $(DISTDIR) || mkdir -p $(DISTDIR) $(COPY_FILE) --parents $(DIST) $(DISTDIR)/ $(COPY_FILE) --parents test.cpp $(DISTDIR)/ clean: compiler_clean -$(DEL_FILE) $(OBJECTS) -$(DEL_FILE) *~ core *.core distclean: clean -$(DEL_FILE) $(TARGET) -$(DEL_FILE) /home/user/stat/stat_plugin_import.cpp .qmake.stash -$(DEL_FILE) Makefile ####### Sub-libraries mocclean: compiler_moc_header_clean compiler_moc_source_clean mocables: compiler_moc_header_make_all compiler_moc_source_make_all check: first benchmark: first compiler_rcc_make_all: compiler_rcc_clean: compiler_moc_header_make_all: compiler_moc_header_clean: compiler_moc_source_make_all: compiler_moc_source_clean: compiler_yacc_decl_make_all: compiler_yacc_decl_clean: compiler_yacc_impl_make_all: compiler_yacc_impl_clean: compiler_lex_make_all: compiler_lex_clean: compiler_clean: ####### Compile test.o: test.cpp ../build/final/include/QtGui/QtGui \ ../build/final/include/QtGui/QtGuiDepends \ ../build/final/include/QtCore/QtCore \ ../build/final/include/QtCore/QtCoreDepends \ ../build/final/include/QtCore/qabstractanimation.h \ ../build/final/include/QtCore/qobject.h \ ../build/final/include/QtCore/qobjectdefs.h \ ../build/final/include/QtCore/qnamespace.h \ ../build/final/include/QtCore/qglobal.h \ ../build/final/include/QtCore/qconfig.h \ ../build/final/include/QtCore/qfeatures.h \ ../build/final/include/QtCore/qsystemdetection.h \ ../build/final/include/QtCore/qprocessordetection.h \ ../build/final/include/QtCore/qcompilerdetection.h \ ../build/final/include/QtCore/qtypeinfo.h \ ../build/final/include/QtCore/qtypetraits.h \ #CUT ../build/final/include/QtGui/qtextobject.h \ ../build/final/include/QtGui/qtextdocumentfragment.h \ ../build/final/include/QtGui/qtextdocumentwriter.h \ ../build/final/include/QtGui/qtextlist.h \ ../build/final/include/QtGui/qtexttable.h \ ../build/final/include/QtGui/qdesktopservices.h \ ../build/final/include/QtGui/qvalidator.h \ ../build/final/include/QtGui/qtguiversion.h $(CXX) -c $(CXXFLAGS) $(INCPATH) -o test.o test.cpp stat_plugin_import.o: /home/user/stat/stat_plugin_import.cpp $(CXX) -c $(CXXFLAGS) $(INCPATH) -o stat_plugin_import.o /home/user/stat/stat_plugin_import.cpp ####### Install install: FORCE uninstall: FORCE FORCE:
make
导致错误:Makefile:1169: warning: overriding commands for target `stat_plugin_import.o' Makefile:808: warning: ignoring old commands for target `stat_plugin_import.o' g++ -c -pipe -O2 -std=gnu++11 -Wall -W -D_REENTRANT -fPIC -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -I. -I. -I../build/final/include -I../build/final/include/QtGui -I../build/final/include/QtCore -I. -I../build/final/mkspecs/linux-g++ -o test.o test.cpp test.cpp: In function ‘int main(int, char**)’: test.cpp:3:22: error: variable ‘QApplication app’ has initializer but incomplete type QApplication app(argc, argv); ^ test.cpp:4:5: error: ‘QMainWindow’ was not declared in this scope QMainWindow window; ^ test.cpp:4:17: error: expected ‘;’ before ‘window’ QMainWindow window; ^ test.cpp:5:5: error: ‘window’ was not declared in this scope window.resize(250, 150); ^ make: *** [test.o] Error 1
于是看了官方文档,尝试了如下命令:
PATH=/home/user/build/final/bin:$PATH
export PATH
qmake -config release
make
但是我遇到了与上面相同的错误将
#include <QtGui>
更改为#include <QApplication>
和#include <QMainWindow>
returns:g++ -c -pipe -O2 -std=gnu++11 -Wall -W -D_REENTRANT -fPIC -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -I. -I. -I../build/final/include -I../build/final/include/QtGui -I../build/final/include/QtCore -I. -I../build/final/mkspecs/linux-g++ -o test.o test.cpp test.cpp:2:24: fatal error: QApplication: No such file or directory #include <QApplication> ^ compilation terminated. make: *** [test.o] Error 1
在此先感谢您的帮助
改变
#include <QtGui>
到
#include <QApplication>
#include <QMainWindow>
AlexanderXV 的评论很好,因为它告诉链接器使用 QtWidgets 并为编译器设置正确的路径。在Qt5中,.pro文件中的命令为:
QT += widgets
来源:https://doc.qt.io/qt-5/qtwidgets-index.html
加上:
您可以使用单个 #include <QtWidgets>
,它包括 QtWidgets 中的所有其他头文件。