我正在尝试从控制台编译我的Qt应用程序。这是规格: MCBC 3.0(已预装Qt和gcc),Qt 4.6.4,gcc v4.1.2,qmake v2.01a。
我的测试qt应用程序只包含2个文件: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();
}
我需要从控制台编译该应用程序。
我有2台虚拟机。 VM#1安装了QtCreator,QtCreator编译了这个应用程序没有麻烦,也可以通过&#34; qmake&#34;从控制台编译app。和&#34;制作&#34;。但是还有VM#2,它没有安装QtCreator,而且问题就来自于此。 我尝试通过命令编译应用程序&#34; qmake make&#34;,尝试使用由QtCreator创建的Makefile,尝试仅使用带有明确定义的Qt库,包含文件和链接库的路径的gcc命令,但我总是得到同样的错误。例如,我使用2个gcc命令,QtCreator使用它来成功编译这个应用程序:
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
请告诉我错过了什么。
答案 0 :(得分:1)
您错过了.pro文件中QT
变量的设置。
为其添加QT += core gui
,重新运行qmake并尝试重新编译
请参阅此处的文档:http://doc.qt.io/qt-4.8/qmake-variable-reference.html#qt
答案 1 :(得分:1)
你的GCC编译器是版本2.95(一个与上个世纪太旧的版本,不符合C ++ 11标准,并且已知非常有缺陷),因为使用了/usr/lib/gcc-lib/i586-linux/2.95.4/
。只需运行g++ -v
或g++ --version
即可检查编译器的版本。 (您可能会遇到一些PATH问题,或者您可能错误地安装了构建工具。)
您应该将编译器升级到更新的版本(2017年7月至少GCC 6,最好是GCC 7)
顺便说一句,我建议您升级Qt库。当前版本(2017年7月)是Qt5.9,你应该使用一些Qt5。
然后你需要重新生成你的makefile,在QT中添加更多,answered by ilbeldus
请注意,您可以使用pkg-config来帮助编译Qt应用程序(可能在您的Makefile
中)。您仍然需要明确使用moc。例如,您可以编译一些Qt C ++ GUI文件foo.cc
(在使用moc
之后),例如
g++ -Wall -g -c $(pkg-config --cflags Qt5Gui) foo.c
您可以使用$(pkg-config --libs Qt5Gui)
作为链接选项。
我不建议使用旧的MCBC东西(即使用谷歌搜索我没有找到它是什么),特别是如果它已经过时了。