2017-07-27 201 views
-1

我想从控制台编译我的Qt应用程序。这里是规格: MCBC 3.0(已预装Qt和gcc),Qt 4.6.4,gcc v4.1.2,qmake v2.01a。GCC无法识别Qt库或/和包含文件

我的测试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编译这个应用程序没有麻烦,也可以通过“qmake”和“make”从控制台编译应用程序。但是有VM#2,它没有安装QtCreator,并且它是问题的来源。 我尝试通过命令“qmake make”编译应用程序,尝试使用由QtCreator创建的Makefile,试图仅使用带有明确定义的路径的gcc命令来包含Qt库,包含文件和链接库,但始终得到相同的错误。比如,我用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 

所以在执行第二个命令后,我得到了同样的错误一如既往:

[[email protected] 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

我可以看到你很有趣,为什么Qt版本太旧了。那么,这不是我的选择。在我的工作中,我们只允许使用这个Qt,因为它得到了我国特殊的政府组织的批准。 – FunnyHorse

回答

1

你的GCC编译器2.95版本(一个太旧版本从上个世纪,这是不符合C++ 11标准,而且已知它很有问题),因为使用了/usr/lib/gcc-lib/i586-linux/2.95.4/。只需运行g++ -vg++ --version即可检查编译器的版本。 (您可能有一些PATH问题,或者您可能错误地安装了构建工具)。

你应该升级编译器到一些非常新的版本(至少GCC 6,最好GCC 7七月2017)

顺便说一句,我建议升级也是你Qt库。当前版本(2017年7月)是Qt5.9,你应该使用一些Qt5。

那么你需要重新生成你的makefile,增加更多的QT,因为你可以使用pkg-config帮助编译Qt应用程序(也许在你Makefileanswered by ilbeldus

通知。您仍然需要明确使用moc。例如,你可能会编译一些Qt C++ GUI文件foo.cc(在使用了moc之后)。

g++ -Wall -g -c $(pkg-config --cflags Qt5Gui) foo.c 

并且您将使用$(pkg-config --libs Qt5Gui)作为链接选项。

我不推荐使用您的旧MCBC事物(即使使用Google搜索,我也没有找到那是什么),特别是如果它过时了。

+0

实际上,即使Qt版本是古老的,所以它们应该一起工作 – IlBeldus

+1

@IlBeldus不,它不是那么古老。 Gcc 2.95实际上是从上个世纪开始的。Qt 4.6需要4.x编译器,如果要使用标准C++类支持,则至少需要4.7。除了根本不编译,它可能还有一些其他的问题和UB,..我很怀疑你是2.6内核(基于编译器版本),根本不支持。只有当我看到它被用于更新的东西时,那就是LynxOS 4,它拥有基于旧版FreeBSD的内核(并且非常老式)。那是2005年。如果您必须使用该工具链,则必须回滚到Qt 3.5 – Swift

+0

感谢您注意到gcc不正确的版本!这真是有帮助。 – FunnyHorse