GCC无法识别Qt库或/和包含文件

时间:2017-07-27 06:54:23

标签: c++ qt gcc

我正在尝试从控制台编译我的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 

请告诉我错过了什么。

2 个答案:

答案 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++ -vg++ --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东西(即使用谷歌搜索我没有找到它是什么),特别是如果它已经过时了。