2017-07-27 88 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