LINUX.ORG.RU

Проблемы с кросскомпиляцией Qt приложения

 , ,


0

1

Делал по инструкции http://habrahabr.ru/post/98131/

Объектные файлы компилируются без ошибок, однако, линковщик выдает такую ошибку:

i486-mingw32-g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -mwindows -Wl,-s -Wl,-subsystem,windows -o calc.exe calc.o main.o moc_calc.o  -L'./lib' -L'/home/gsa/.wine/drive_c/QtSDK/Desktop/Qt/4.8.1/mingw/lib' -lmingw32 -lqtmain -lQtGui4 -lQtCore4 
/usr/lib/gcc/i486-mingw32/4.7.0/../../../../i486-mingw32/bin/ld: warning: cannot find entry symbol nable-stdcall-fixup; defaulting to 0000000000401000
/home/gsa/.wine/drive_c/QtSDK/Desktop/Qt/4.8.1/mingw/lib/libqtmain.a(qtmain_win.o):qtmain_win.cpp:(.text+0x1c2): undefined reference to `__Unwind_Resume'
/home/gsa/.wine/drive_c/QtSDK/Desktop/Qt/4.8.1/mingw/lib/libqtmain.a(qtmain_win.o):qtmain_win.cpp:(.text$_ZN7QVectorIPcE7reallocEii[QVector<char*>::realloc(int, int)]+0x187): undefined reference to `__Unwind_Resume'
/home/gsa/.wine/drive_c/QtSDK/Desktop/Qt/4.8.1/mingw/lib/libqtmain.a(qtmain_win.o):qtmain_win.cpp:(.eh_frame+0x12): undefined reference to `___gxx_personality_v0'
collect2: error: ld returned 1 exit status
make: *** [calc.exe] Ошибка 1
Qt для винды качал с qt-project.org, но в папке QtSDK/Desktop/Qt/4.8.1/mingw/lib/ лежат только статические либы. Так и должно быть?


Походу рецепт на хабре от упоротого виндузятника. Скрещивать линуховую и виндовую сборки можно только по укурке! Для тех, кто не осиливает самостоятельную сборку кросс-тулчейна и библиотек, смотреть на http://mxe.cc/

AF ★★★
()
Ответ на: комментарий от AF

Раньше этот рецепт прекрасно работал. В нем не скещивают сборки, а правят mkspec, указывая в нем нужный кросскомпилятор и расположение headerов и библиотек. ИМХО, логичное решение.

Я пользуюсь арчем и полагаю, что это могло сломаться после обновления Qt.

GSA
() автор топика
Ответ на: комментарий от GSA

Надо было сначала все перемешать, а потом разруливать ч-з правку mkspec, пионэрия, чо )

И это - «undefined reference to `__Unwind_Resume'» наводит меня на смутные подозрения, что дело касается обработки ексепшенов. А они в gcc могут быть заимплеменчены по разному - DW2 и SJLJ. И, конечно, между собой они какбэ несовместимы. Если Qt собран с одним типом обработки, а у тебя в gcc на хосте другой тип, то ничего хорошего не выйдет.

Блин, собрать Qt - как два пальца об асфальт! Камрад Dendy дето даже писал, как он Qt кроскомпилил. Там тоже ничего сложного. Ну нафига эти велосипеды?

AF ★★★
()
Ответ на: комментарий от AF

Похоже ты был прав по поводу несовместимости компилятора и библиотек. Сейчас попробовал mingw (из QtSDK) под wine и все заработало.

GSA
() автор топика
Ответ на: комментарий от AF

Нужно писать Dendy, чтобы кастование работало эффективней.

По теме, вот та самая переписка, дело было давнее, но принципы незыблимы: CMake, Qt и cross compiling

Dendy ★★★★★
()

В статье ошибка, нужно использовать mkspec unsupported/win32-g++-cross

annulen ★★★★★
()
Ответ на: комментарий от GSA

Я пользуюсь арчем и полагаю, что это могло сломаться после обновления Qt.

Чтобы это работало, нужно, чтобы версии Qt под хост и винду были одинаковыми, иначе жди беды

annulen ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.