2015-03-31 63 views
0

我想在Linux上使用mingw-w64爲Windows交叉編譯Qt應用程序。一切順利,直到連接階段;我收到了數百個與Qt庫有關的「未定義參考」錯誤。下面是一個示例:http://pastebin.com/b20Ede7a連接Qt應用程序時出現數百個「未定義參考」錯誤

這是我的.pro文件:

TEMPLATE = app 
TARGET = myApp 
DEPENDPATH += . res src 

QT += core gui 
CONFIG += static 

isEmpty(TTS_ENGINE) { 
    TTS_ENGINE = flite 
} 

QMAKE_CXX = i686-w64-mingw32.static-g++ 
QMAKE_LD = i686-w64-mingw32.static-ld 
QMAKE_CXXFLAGS += -std=c++0x -ggdb -DWINDOWS 
QMAKE_LIBDIR += /opt/mxe/usr/i686-w64-mingw32.static/qt/lib /opt/mxe/usr/i686-w64-mingw32.static/lib 
QMAKE_LIBS += -lSDL2_image -lSDL2_mixer -lpng -lz -ljpeg -lwebp -ltiff -lfreetype -lSDL2_ttf -llua `sdl2-config --libs` -lgif -lfontconfig -lm 
INCLUDEPATH += . src /opt/mxe/usr/i686-w64-mingw32.static/qt/include /opt/mxe/usr/i686-w64-mingw32.static/include /opt/mxe/usr/i686-w64-mingw32.static/include/freetype2 

# Input 
HEADERS += bunch/of/headers 
FORMS += res/desc.ui 
RESOURCES += res/desc.res 
SOURCES += bunch/of/sources 

可能是什麼這個問題的原因是什麼?我使用MXE的靜態Qt4。

編輯:另外,這裏是i686-w64-mingw32.static-g++ -v輸出:

Using built-in specs. 
COLLECT_GCC=/opt/mxe/usr/bin/i686-w64-mingw32.static-g++ 
COLLECT_LTO_WRAPPER=/opt/mxe/usr/libexec/gcc/i686-w64-mingw32.static/4.9.2/lto-wrapper 
Target: i686-w64-mingw32.static 
Configured with: /opt/mxe/tmp-gcc-i686-w64-mingw32.static/gcc-4.9.2/configure --target=i686-w64-mingw32.static --build=i686-pc-linux-gnu --prefix=/opt/mxe/usr --libdir=/opt/mxe/usr/lib --enable-languages=c,c++,objc,fortran --enable-version-specific-runtime-libs --with-gcc --with-gnu-ld --with-gnu-as --disable-nls --disable-shared --disable-multilib --without-x --disable-win32-registry --enable-threads=win32 --disable-libgomp --with-cloog=/opt/mxe/usr --with-gmp=/opt/mxe/usr --with-isl=/opt/mxe/usr --with-mpc=/opt/mxe/usr --with-mpfr=/opt/mxe/usr --with-as=/opt/mxe/usr/bin/i686-w64-mingw32.static-as --with-ld=/opt/mxe/usr/bin/i686-w64-mingw32.static-ld --with-nm=/opt/mxe/usr/bin/i686-w64-mingw32.static-nm 
Thread model: win32 
gcc version 4.9.2 (GCC) 

而失敗鏈接命令(約單行不好意思):

i686-w64-mingw32.static-g++ -Wl,-s -mthreads -Wl,-subsystem,windows -o release/descend.exe object_script.descend.Release -L'/opt/mxe/usr/i686-w64-mingw32.static/qt/lib' -L'/opt/mxe/usr/i686-w64-mingw32.static/lib' -L'/opt/mxe/usr/i686-w64-mingw32.static/qt/lib' -lSDL2_image -lSDL2_mixer -lwebp -lfreetype -lSDL2_ttf -llua `sdl2-config --libs` -lgif -lfontconfig -lflite_cmu_us_kal -lflite_cmu_time_awb -lflite_cmu_us_kal16 -lflite_cmu_us_awb -lflite_cmu_us_rms -lflite_cmu_us_slt -lflite_usenglish -lflite_cmu_indic_lang -lflite_cmu_grapheme_lang -lflite_cmulex -lflite_cmu_indic_lex -lflite_cmu_grapheme_lex -lflite -lmingw32 -lqtmain -lQtGui -lgdi32 -lcomdlg32 -loleaut32 -limm32 -lwinmm -lwinspool -lmsimg32 -lmng -llcms2 -lm -ltiff -llzma -ljpeg -lQtCore -lpng -lole32 -luuid -lws2_32 -ladvapi32 -lshell32 -luser32 -lkernel32 -lz 
+0

'i686-w64-mingw32.static-g ++ -v'告訴版本是什麼? – a3f 2015-03-31 04:28:33

+0

它給版本4.9.2。 – 2015-03-31 04:30:18

+0

請在問題本身中顯示實際的鏈接命令。 – hyde 2015-03-31 04:52:44

回答

0

我覺得你libQtCore.a存檔使用不同版本的g ++進行編譯。目前它試圖在鏈接步驟中使用以下路徑: /opt/mxe/usr/i686-w64-mingw32.static/qt/lib/libQtCore.a

如果您不打算使用此版本,然後在鏈接步驟中指定libQtCore.a的路徑(使用相同版本的gcc進行編譯)。

+0

這些Qt庫是在我安裝MXE時用相同的編譯器構建的。我正在考慮廢棄我的Qt版本並重新開始。 – 2015-03-31 05:23:10

+0

一個好主意是,還要檢查包含* .cpp文件的libQtCore是否使用gcc而不是g ++編譯 – faadi 2015-03-31 05:35:08

相關問題