2015-03-31 2 views
0

Я пытаюсь перекрестно скомпилировать приложение Qt для Windows с помощью mingw-w64 в Linux. Все складывается плавно до стадии связывания; Я получаю сотни «неопределенных ссылок», связанных с библиотеками 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 

Что может быть причиной этой проблемы? Я использую статический Qt4 от MXE.

Edit: Кроме того, здесь есть выход 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

+0

Он дает версию как 4.9.2. –

+0

Пожалуйста, покажите фактическую ссылку в самом вопросе. – hyde

ответ

0

Я думаю, что ваш архив libQtCore.a является скомпилированный с использованием другой версии g ++. В настоящее время он пытается использовать его в следующем пути на этапе ссылка: /opt/mxe/usr/i686-w64-mingw32.static/qt/lib/libQtCore.a

Если вы не значит использовать эту версию, затем укажите путь к libQtCore.a на этапе ссылки (который скомпилирован с использованием той же версии gcc).

+0

Эти библиотеки Qt были построены с тем же компилятором в то время, когда я установил MXE. Я думаю об утилизации моей сборки Qt и ее запуске заново. –

+0

Хорошей идеей было бы также проверить, был ли libQtCore, который содержит * .cpp-файлы, скомпилирован с gcc вместо g ++ – faadi