qt編譯不了
Ⅰ vs不能編譯qt
1. 建立環境變數
QMAKESPEC win32-msvc2011 // 注意
QTDIR S:\QT\4.8.4 // Qt的安裝目錄
Path S:\QT\4.8.4\bin;
注意: QMAKESPEC 還是 win32-msvc2011 因為如果要改成win32-msvc2012,需要改很多相關的配置。又麻煩又不安全。而且使用win32-msvc2011並不影響我們的結果。
2. 修改 mkspecs\win32-msvc2011\qmake.conf
將 QMAKE_COMPILER_DEFINES += _MSC_VER=1600 WIN32 當中的1600改成1700
QMAKE_CFLAGS = -nologo -Zm200 -Zc:wchar_t-
改為
QMAKE_CFLAGS = -nologo -Zm200 -Zc:wchar_t
3. 在開始菜單中找到 VS2012 x86 Native Tools Command Prompt 並運行
這一步非常簡單但很重要,一定要選擇VS2012目錄下的bat文件
4. 在控制台中,切換到Qt的安裝目錄下。使用如下參數進行配置
configure.exe -platform win32-msvc2011 -opensource -debug-and-release -shared -qt-sql-sqlite -plugin-sql-sqlite -qt-zlib -qt-libpng -qt-libmng -qt-libtiff -qt-libjpeg -qmake -process -rtti -dbus -webkit -script -scripttools -no-dbus
5. nmake 開始編譯。 不過在編譯過程中會遇到幾個錯需要手動修改一下代碼。
6. 第一個錯誤如下:
.\wtf/HashSet.h(180) : error C2664: 'std::pair::pair(const std::pair &)' : cannot convert parameter 1 from 'std::pair' to 'const std::pair &'
在Qt的Src目錄搜索這個HashSet.h
將180行所在的函數以及它下面的函數用下面的代碼替換:
template
inline pair<typename HashSet::const_iterator, bool> HashSet::add(const ValueType &value)
{
auto p= m_impl.add(value);
return make_pair(typename HashSet::const_iterator(p.first), p.second);
}
template
template
inline pair<typename HashSet::iterator, bool>
HashSet::add(const T& value)
{
typedef HashSetTranslatorAdapter Adapter;
typedef typename HashSet::iterator iter_type;
auto& temp = m_impl.template addPassingHashCode(value, value);
return make_pair((iter_type)temp.first, temp.second);
}
7. 繼續 nmake遇到第二個錯誤
platform\DefaultLocalizationStrategy.cpp(327) : error C2001: newline in constant
platform\DefaultLocalizationStrategy.cpp(327) : fatal error C1057: unexpected end of file in macro expansion
這個錯誤的原因是因為代碼裡面的非英文的引號造成的。
原始的錯誤代碼如下:
return WEB_UI_STRING("Look Up 「」", "Look Up context menu item with selected word").replace("", (selectedString));
大家注意 單詞前後的引號。就是它造成編譯報錯。修改成下面的代碼
return WEB_UI_STRING("Look Up \"\"", "Look Up context menu item with selected word").replace("", (selectedString));
8. 再次nmake,好了到這里為止,就剩下漫長的等待了。我一般是睡覺之前編譯,一晚上的時間足夠了。
9. 補充,有個開源工具叫jom,也是qt官方的,它支持多核編譯,可以大大加快編譯速度。
使用的方法也很簡單jom –j 8 你有幾個核就寫幾。我是8個核
注意最後兩個DLL是VS2012的運行時庫,說明我們已經編譯成功了!
Ⅱ 為什麼這個Qt程序編譯不了
原因:Qt不支持中文的路徑,把源碼的路徑全部改成英文即可解決問題。
Ⅲ Qt 編程無法編譯,高手來!
把你生成的xxx-build-desktop這個文件夾刪除,重新編譯試試看,如果不行的話就是你的環境變數沒設好,為mingw32設一下環境變數
Ⅳ 求助QT5.4 安裝在win8.1後無法編譯
關於QT安裝時出現錯誤請參照我的上一篇文章http://hi..com/whyme%CE%DE%CF%DE/blog/item/91103d1a71f4aed5e2fe0b65.html
現在說一下編譯運行出錯的解決辦法:
說明:redhat紅帽5.4有點太老了,所以運行最新的QT時,出現了各種問題,最主要的就是各種庫的問題:
(1)undefined reference to `FcFreeTypeQueryFace'的問題
需要更新fontconfig,我用的是fontconfig-2.6.0.tar.gz,2.5.0我試了,出現了很多錯誤,不知道為什麼2.6.0可以,
附下載地址http://115.com/file/be9m2r
解壓到/usr/src 進入後 ./autogen.sh 然後終端中提示make,你就make,最後make install。完成。./autogen.sh也可以輸入./configure --sysconfdir=/etc --prefix=/usr --mandir=/usr/share/man 具體可能是./configure後指明了安在你想要安得地方吧(我用的是./autogen.sh)
如果期間遇到錯誤不要不耐煩,按照提示網路一下會有解決的辦法的。
(2)undefined reference to 'FT_Library_SetLcdFilter'
這是由於freetype太舊的原因,也是一樣,需要更新:
附下載地址:http://115.com/file/anwcxdfk
安裝方法與(1)一樣。也有安裝(1)時可能有問題要先安裝(2) 這個自己嘗試吧,我是先(1)後(2)的。
還有就是我的系統是紅帽企業版5.4,不是的或者版本不一樣的,我不知道我的方法有沒有效果。
(3)接下來應該有的常式就可以編譯運行了,但是還有不能運行的,那是因為你的glibc太舊了,這個是c動態庫。必須注意的是,幾乎所有的應用程序都依賴於glibc的動態庫,重新編譯安裝glibc必須非常謹慎,一旦出錯可能導致系統無法繼續使用。所以強烈建議閱讀源碼目錄下的INSTALL。
附下載地址:http://115.com/file/e749sc6n
第一步是配置glibc,出於安全的考慮,glibc不允許在源碼目錄樹下編譯,必須新建一個目錄,然後在新建目錄下運行configure,我就在/usr/src下建了一個glibc文件夾mkdir glibc。然後在新建目錄里運行解壓縮文件中的config,在運行這個之前,先在終端運行需要加上優化開關export CFLAGS="-g -O2 -march=i686" ,然後運行../glibc/configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin 這樣就不是默認安裝的路徑了安裝在/usr下,這會將glibc安裝為linux系統的標准庫。
執行make -j 。glibc的編譯相當耗時,可以給make加上-j選項並行編譯glibc。make -j
然後make install。
make時可能會有錯誤我就遇到了以下錯誤,我是這么解決的:
1、在編譯glibc的過程中可能出現錯誤:「../sysdeps/i386/fpu/s_frexp.S:66: Error: invalid identifier for ".ifdef"」,解決方法是:
1)、在glibc源碼目錄下找到文件:nptl/sysdeps/pthread/pt-initfini.c,找到第46行附近:asm ("\n#include "defs.h"");在其後添加代碼:
asm ("\n#if defined __i686 && defined __ASSEMBLER__");
asm ("\n#undef __i686");
asm ("\n#define __i686 __i686");
asm ("\n#endif");
2)、在glibc源碼目錄下找到文件:sysdeps/unix/sysv/linux/i386/sysdep.h,找到第30行附近:#include <tls.h>,在其後添加代碼:
#if defined __i686 && defined __ASSEMBLER__
#undef __i686
#define __i686 __i686
#endif
重新make
2、在編譯glibc的過程中可能出現錯誤:「./sysdeps/i386/i686/multiarch/strcmp.S:78: Error: Error: unrecognized symbol type "gnu_indirect_function"unrecognized symbol type "gnu_indirect_function"」,原因是沒有安裝新版的binutils,如果依照前面的步驟安裝了binutils-2.21應該不會出現該錯誤。(注第2個錯誤我沒遇到)
註:還有一個地方不知道是哪一步遇到錯誤了需要安裝libxml我在紅帽的系統鏡像中的server中找到了三個相關文件libxml2*.rpm安裝即可!!!!!!
至此,重啟reboot,打開QT運行常式,可能還有問題,我的就是還是有問題,解決辦法如下:
把QT的安裝目錄和QT中的bin都添加為環境變數,在/etc/profile下,具體怎麼填您應該知道吧,這里不提了。source /etc/profile一下
然後再點擊QT的左邊欄的項目在構建和運行的選項中,您可能哪裡沒有選擇,一定要讓你的項目有效和目錄正確,QT的版本正確!!!QT的gcc編譯目錄正確,gcc一般用的是QT文件中自帶的!!如果還不行,那就在你的在項目目錄項運行make clean!!如果還不對!!!vi Makefile 可能是這里有問題,如果不會改,就乾脆刪了rm Makefiel。然後再在QT中運行一下。
Ⅳ 新人求助 Qt無法編譯運行
Could not find qmake configuration directory 從這個錯誤上看,是qt.conf配置文件受到破壞。 有兩種可能性: 1、病毒惡意破壞qt.conf文件 2、自然界不可抗因素破壞(比如電腦遭雷擊導致硬碟中的部分文件丟失)
Ⅵ QT編譯錯誤,怎麼解決
項目->構建設置,把中文路徑改為英文路徑 ,記得清理之後再重新構建哦
Ⅶ Qt 編譯不了,怎麼解決啊,'cl' 不是內部或外部命令,也不是可運行的程序 或批處理文件。
沒裝 Visual Studio 自然用不了 cl 編譯器。
如果確定裝了 Visual Studio ,就手動設置編譯器選項,選擇正確的路徑
如果真的沒裝 Visual Studio ,也沒必要裝(畢竟 Visual Studio 體積不小),mingw-w64體積小得多,而編譯器的優化能力甚至更出色(下載地址: http://sourceforge.net/projects/mingw-w64/ )
Ⅷ QT 在Ubuntu下無法編譯,怎麼解決
g++沒有安裝,一般這種情況都是環境中找不到編譯器的緣故。你這只是簡單安裝的linux的桌面版qt,所以只要環境中有c++即可,如果你是安卓,那東西就更多了,ant,java,sdk等等。
解決辦法:sudo apt-get install g++
Ⅸ 新人求教,急.qt4.8.6無法編譯
認真核對操作步驟:
1、修改環境變數工具推薦:Rapid Environment Editor。
修改前請先備份當前的環境變數。然後:
(1)檢查系統變數path,刪除有關mingw其他版本等信息,以免與後續的mingw32-make沖突。
(2)檢查用戶變數INCLUDE、LIB、PATH、MSDevDir和MSVCDir,刪除有關\Microsoft Visual Studio\VC98的信息,因為它們會與後續的mingw32-make沖突,導致編譯出錯。
2、在電腦上安裝mingw編譯器,假設路徑安裝在C:\Qt\mingw32。將C:\Qt\mingw32\bin添加進環境變數path,打開DOS命令行輸入gcc --version和g++ --version和mingw32-make --version驗證編譯器安裝成功。我用的MinGW版本是V4.8.2,
3、解壓qt-everywhere-opensource-src-4.8.6.zip並進入目錄。例如:D:\qt-everywhere-opensource-src-4.8.6\
4、依次執行以下DOS命令:
(1)configure -debug-and-release -opensource -prefix "D:\Qt4.8.6" -platform win32-g++ -nomake demos -nomake examples
常見的使用選項說明:
-debug-and-release 編譯debug和release版
-opensource 選擇開源協議並確認
-platform win32-g++ 使用mingw編譯
-prefix "D:\Qt4.8.6" 指定編譯結果目錄,如果未指定則默認當前
-shared 創建和使用共享Qt庫
-static 創建和使用靜態Qt庫
-nomake demos -nomake examples 不編譯常式
-nomake tests 不編譯tests
-skip qtwebkit 忽略qtwebkit,因為編譯它特別消耗時間
-mp 使用多核優化編譯
(2)mingw32-make
(3)mingw32-make install
5、編譯完成後,把C:\Qt\mingw32\bin\路徑下的三個文件libgcc_s_dw2-1.dll、libstdc++-6.dll和libwinpthread-1.dll拷貝到D:\qt-everywhere-opensource-src-4.8.6\bin\。另外,也請把步驟1備份的環境變數還原。
6、修改Qt安裝路徑
最初編譯時選擇的路徑是D:\Qt4.8.6\。如果想將它復制到其他盤符,並且改名,例如:C:\Qt\4.8.6_MinGW。這樣一來會有問題嗎?是的,會有問題,因為Qt有絕對路徑依賴症。改名後C:\Qt\4.8.6_MinGW\bin\的exe執行程序都會出問題,要麼程序打不開,要麼多國語言發生異常。用記事本打開C:\Qt\4.8.6_MinGW\bin\qmake.exe,查找關鍵字「qt_prfxpath」,可以看到裡面含有原始的安裝路徑。我們不可以手動去修改qmake.exe,真正有效的解決方法是:
在C:\Qt\4.8.6_MinGW\bin\路徑下創建一個qt.conf文件,內容為
[paths]
Prefix = C:/Qt/4.8.6_MinGW
請注意:qt.conf文件必須是ANSI格式,並且Prefix的斜杠風格採取的是Linux的,而非Windows,否則會失效。或者使用"Prefix = .. ",如此一來,任意路徑有效。