2012-10-25 86 views
2

我想建立一個原始的Qt 4.8.3壓縮包,而我用這個命令配置的構建:構建失敗嘗試的時候在Debian交叉編譯的Qt 4.8.3,爲Win32

./configure -opensource -xplatform win32-g++ -device-option CROSS_COMPILE=i686-w64-mingw32- 

繼是(重新)運行make的結果:

$ make 
cd src/tools/bootstrap/ && make -f Makefile 
make[1]: Entering directory `/home/wena/src/qt-4.8.3/src/tools/bootstrap' 
make[1]: Nothing to be done for `first'. 
make[1]: Leaving directory `/home/wena/src/qt-4.8.3/src/tools/bootstrap' 
cd src/tools/moc/ && make -f Makefile 
make[1]: Entering directory `/home/wena/src/qt-4.8.3/src/tools/moc' 
make[1]: Nothing to be done for `first'. 
make[1]: Leaving directory `/home/wena/src/qt-4.8.3/src/tools/moc' 
cd src/tools/rcc/ && make -f Makefile 
make[1]: Entering directory `/home/wena/src/qt-4.8.3/src/tools/rcc' 
make[1]: Nothing to be done for `first'. 
make[1]: Leaving directory `/home/wena/src/qt-4.8.3/src/tools/rcc' 
cd src/tools/uic/ && make -f Makefile 
make[1]: Entering directory `/home/wena/src/qt-4.8.3/src/tools/uic' 
make[1]: Nothing to be done for `first'. 
make[1]: Leaving directory `/home/wena/src/qt-4.8.3/src/tools/uic' 
cd src/winmain/ && make -f Makefile 
make[1]: Entering directory `/home/wena/src/qt-4.8.3/src/winmain' 
make -f Makefile.Debug all 
make[2]: Entering directory `/home/wena/src/qt-4.8.3/src/winmain' 
make[2]: Nothing to be done for `all'. 
make[2]: Leaving directory `/home/wena/src/qt-4.8.3/src/winmain' 
make -f Makefile.Release all 
make[2]: Entering directory `/home/wena/src/qt-4.8.3/src/winmain' 
make[2]: Nothing to be done for `all'. 
make[2]: Leaving directory `/home/wena/src/qt-4.8.3/src/winmain' 
make[1]: Leaving directory `/home/wena/src/qt-4.8.3/src/winmain' 
cd src/corelib/ && make -f Makefile 
make[1]: Entering directory `/home/wena/src/qt-4.8.3/src/corelib' 
make -f Makefile.Debug all 
make[2]: Entering directory `/home/wena/src/qt-4.8.3/src/corelib' 
i686-w64-mingw32-g++ -shared -mthreads -Wl,--out-implib,/home/wena/src/qt-4.8.3/lib/libQtCored4.a -o ../../lib/QtCored4.dll object_script.QtCored.Debug -L'/home/wena/src/qt-4.8.3/lib' -L'/home/wena/src/qt-4.8.3/lib' -lole32 -luuid -lws2_32 -ladvapi32 -lshell32 -luser32 -lkernel32 .obj/debug-shared/QtCored_resource_res.o 
Creating library file: /home/wena/src/qt-4.8.3/lib/libQtCored4.a 
./.obj/debug-shared/qtextcodec.o: In function `setup': 
/home/wena/src/qt-4.8.3/src/corelib/codecs/qtextcodec.cpp:771: undefined reference to `QGb18030Codec::QGb18030Codec()' 
/home/wena/src/qt-4.8.3/src/corelib/codecs/qtextcodec.cpp:772: undefined reference to `QGbkCodec::QGbkCodec()' 
/home/wena/src/qt-4.8.3/src/corelib/codecs/qtextcodec.cpp:773: undefined reference to `QGb2312Codec::QGb2312Codec()' 
/home/wena/src/qt-4.8.3/src/corelib/codecs/qtextcodec.cpp:774: undefined reference to `QEucJpCodec::QEucJpCodec()' 
/home/wena/src/qt-4.8.3/src/corelib/codecs/qtextcodec.cpp:775: undefined reference to `QJisCodec::QJisCodec()' 
/home/wena/src/qt-4.8.3/src/corelib/codecs/qtextcodec.cpp:776: undefined reference to `QSjisCodec::QSjisCodec()' 
./.obj/debug-shared/qtextcodec.o: In function `QEucKrCodec': 
/home/wena/src/qt-4.8.3/src/corelib/codecs/../../plugins/codecs/kr/qeuckrcodec.h:77: undefined reference to `vtable for QEucKrCodec' 
./.obj/debug-shared/qtextcodec.o: In function `QCP949Codec': 
/home/wena/src/qt-4.8.3/src/corelib/codecs/../../plugins/codecs/kr/qeuckrcodec.h:91: undefined reference to `vtable for QCP949Codec' 
./.obj/debug-shared/qtextcodec.o: In function `QBig5Codec': 
/home/wena/src/qt-4.8.3/src/corelib/codecs/../../plugins/codecs/tw/qbig5codec.h:56: undefined reference to `vtable for QBig5Codec' 
./.obj/debug-shared/qtextcodec.o: In function `QBig5hkscsCodec': 
/home/wena/src/qt-4.8.3/src/corelib/codecs/../../plugins/codecs/tw/qbig5codec.h:70: undefined reference to `vtable for QBig5hkscsCodec' 
collect2: ld returned 1 exit status 
make[2]: *** [../../lib/QtCored4.dll] Error 1 
make[2]: Leaving directory `/home/wena/src/qt-4.8.3/src/corelib' 
make[1]: *** [debug-all] Error 2 
make[1]: Leaving directory `/home/wena/src/qt-4.8.3/src/corelib' 
make: *** [sub-corelib-make_default-ordered] Error 2 

我建立在最新的Debian 7(喘息)。

+0

這將節省時間[使用MXE代替]( http://stackoverflow.com/a/13211922),一個用於Unix-> Windows交叉編譯的幫助工具。 – Tshepang

回答

0

您缺少文本編解碼器插件使用的libiconv庫。有人遇到同樣的問題here

+0

之前曾嘗試過,並沒有工作 – Tshepang

+0

它是如何工作的?你有沒有發現同樣的錯誤? – cmannett85

+0

我得到了同樣的錯誤。 – Tshepang

2

使用-no-iconv替代4.7時,我遇到了同樣的錯誤。

來到這個技巧爲src/corelib的/編解碼器/ codecs.pri:

win32 { 
     !contains(QT_CONFIG,iconv) { 
       # no iconv, so we put all plugins in the library 
       HEADERS += \ 
         ../plugins/codecs/cn/qgb18030codec.h \ 
         ../plugins/codecs/jp/qeucjpcodec.h \ 
         ../plugins/codecs/jp/qjiscodec.h \ 
         ../plugins/codecs/jp/qsjiscodec.h \ 
         ../plugins/codecs/kr/qeuckrcodec.h \ 
         ../plugins/codecs/tw/qbig5codec.h \ 
         ../plugins/codecs/jp/qfontjpcodec.h 
       SOURCES += \ 
         ../plugins/codecs/cn/qgb18030codec.cpp \ 
         ../plugins/codecs/jp/qjpunicode.cpp \ 
         ../plugins/codecs/jp/qeucjpcodec.cpp \ 
         ../plugins/codecs/jp/qjiscodec.cpp \ 
         ../plugins/codecs/jp/qsjiscodec.cpp \ 
         ../plugins/codecs/kr/qeuckrcodec.cpp \ 
         ../plugins/codecs/tw/qbig5codec.cpp \ 
         ../plugins/codecs/jp/qfontjpcodec.cpp 
     } 
} 

有其他錯誤和黑客,但它看起來就像他們在4.8.3走了。

+0

我現在在main.cpp中包含文件:42:0:dialog.h:65:5:error:'QSharedMemory'沒有命名類型,但是如果我禁用了構建示例,構建成功:** - nomake例子**。 – Tshepang

+1

我通常沒有演示和示例來加速構建,而那些加上解除武裝的webkit測試則提供了無故障體驗。 – error

0

爲了避免這個錯誤:

In file included from main.cpp:42:0: dialog.h:65:5: error: ‘QSharedMemory’ does not name a type 

看起來像MXE使用./configure -nomake examples ...(另一個選擇是什麼VLC使用,這是剛做的make sub-src不是全局化妝 - 雖然你不能與此使用make install方法,因爲它仍然試圖構建示例)。好像在QT的錯誤給我...也許使用本地製造的qmake會有所幫助,並沒有嘗試...

參見How do I configure Qt for cross-compilation from Linux to Windows target?