数百个"未定义的参考"链接Qt应用程序时出错

时间:2015-03-31 04:22:29

标签: c++ qt linker static-linking mingw-w64

我正在尝试使用Linux上的mingw-w64交叉编译Windows的Qt应用程序。一切都顺利进行,直到连接阶段;我收到了数百个与Qt库有关的“未定义引用”错误。以下是一个示例:http://pastebin.com/b20Ede7a

这是我的.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 

1 个答案:

答案 0 :(得分:0)

我认为您的libQtCore.a存档是使用不同版本的g ++编译的。目前它正在尝试在链接步骤中使用以下路径:    /opt/mxe/usr/i686-w64-mingw32.static/qt/lib/libQtCore.a

如果您不打算使用此版本,请在链接步骤(使用相同版本的gcc编译)指定libQtCore.a的路径。