我正在尝试从控制台编译我的Qt应用程序。规格如下: MCBC 3.0 (预装Qt和gcc),Qt 4.6.4,gcc v4.1.2,qmake v2.01a。
我的测试qt应用程序只包含两个文件: basket.pro和main.cpp。
basket.pro:
TARGET = basket
TEMPLATE = app
SOURCES += main.cpp
HEADERS += main.cpp:
#include <QtGui/QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
return a.exec();
}我需要从控制台编译该应用程序。
我有两个虚拟机。VM #1已经安装了QtCreator,QtCreator编译这个app没有问题,也可以通过"qmake“和"make”从控制台编译app。但也有没有安装QtCreator的VM#2,这就是问题所在。我尝试通过命令"qmake make“编译应用程序,尝试使用由QtCreator创建的Makefile,尝试只使用具有显式定义的路径到Qt库、包含文件和链接库的gcc comand,但总是收到相同的错误。例如,我使用了QtCreator用来成功编译此应用程序的2个gcc命令:
g++ -c -pipe -g -Wall -W -D_REENTRANT -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/lib/qt46/mkspecs/linux-g++ -I. -I/usr/lib/qt46/include/QtCore -I/usr/lib/qt46/include/QtGui -I/usr/lib/qt46/include -I. -o main.o main.cpp
g++ -o basket main.o -L/usr/lib/qt46/lib -lQtGui -L/usr/lib/qt46/lib -lQtCore -lpthread因此,在执行第二个命令后,我得到了与往常一样的错误:
[root@ARM basket]# ./build_g++_step2
main.o: In function `basic_string<char, string_char_traits<char>, __default_alloc_template<true, 0> >::data(void) const':
/usr/lib/gcc-lib/i586-linux/2.95.4/../../../../include/g++-3/std/bastring.h:152: undefined reference to `QApplication::QApplication(int &, char **, int)'
/usr/lib/gcc-lib/i586-linux/2.95.4/../../../../include/g++-3/std/bastring.h:152: undefined reference to `QApplication::exec(void)'
/usr/lib/gcc-lib/i586-linux/2.95.4/../../../../include/g++-3/std/bastring.h:152: undefined reference to `QApplication::~QApplication(void)'
/usr/lib/gcc-lib/i586-linux/2.95.4/../../../../include/g++-3/std/bastring.h:152: undefined reference to `QApplication::~QApplication(void)'
collect2: ld returned 1 exit status 请告诉我错过了什么。
发布于 2017-07-27 14:58:46
因为使用了/usr/lib/gcc-lib/i586-linux/2.95.4/,所以您的GCC编译器是2.95版(上个世纪的一个太旧的版本,不符合C++11标准,而且众所周知它有很多be )。只需运行g++ -v或g++ --version即可检查编译器的版本。(你可以喝点PATH。
你应该将你的编译器升级到更新的版本(至少是GCC 6,最好是2017年7月的GCC 7 )
顺便说一句,我也推荐升级你的Qt库。当前版本(2017年7月)是Qt5.9,您应该使用一些Qt5。
然后,您需要重新生成您的makefile,在QT中添加更多,作为answered by ilbeldus
请注意,您可以使用pkg-config来帮助编译Qt应用程序(可能在您的Makefile中)。您仍然需要显式地使用moc。例如,您可以编译一些Qt C++图形用户界面文件foo.cc (在使用moc之后),例如
g++ -Wall -g -c $(pkg-config --cflags Qt5Gui) foo.c对于链接选项,您可以使用$(pkg-config --libs Qt5Gui)。
我不推荐使用你的旧的MCBC东西(即使用谷歌搜索,我也没有找到它是什么),特别是如果它已经过时了。
发布于 2017-07-27 14:58:19
您的.pro文件中缺少QT变量的设置。
添加QT += core gui,重新运行qmake并尝试重新编译
请参阅此处的文档:http://doc.qt.io/qt-4.8/qmake-variable-reference.html#qt
https://stackoverflow.com/questions/45343375
复制相似问题