кросс-компиляция qt (linux / mingw -> windows): различные неопределенные ссылки

(Кросспост из Вот, так как ни у кого нет идеи)

Здравствуйте все,

Я пытаюсь кросс-компилировать QT 4.8.3 из моего Linux для моих окон. Конечная цель состоит в том, чтобы создать статический qt, но независимо от того, был ли он статическим или нет, я всегда получаю одну и ту же ошибку. Игра с разными флагами тоже не помогла:

./.obj/release-shared/qtextcodec.o:qtextcodec.cpp:(.text+0x18dc): undefined reference to `QGb18030Codec::QGb18030Codec()'
./.obj/release-shared/qtextcodec.o:qtextcodec.cpp:(.text+0x18ef): undefined reference to `QGbkCodec::QGbkCodec()'
./.obj/release-shared/qtextcodec.o:qtextcodec.cpp:(.text+0x1902): undefined reference to `QGb2312Codec::QGb2312Codec()'
./.obj/release-shared/qtextcodec.o:qtextcodec.cpp:(.text+0x1915): undefined reference to `QEucJpCodec::QEucJpCodec()'
./.obj/release-shared/qtextcodec.o:qtextcodec.cpp:(.text+0x1928): undefined reference to `QJisCodec::QJisCodec()'
./.obj/release-shared/qtextcodec.o:qtextcodec.cpp:(.text+0x193b): undefined reference to `QSjisCodec::QSjisCodec()'
./.obj/release-shared/qtextcodec.o:qtextcodec.cpp:(.text+0x1956): undefined reference to `vtable for QEucKrCodec'
./.obj/release-shared/qtextcodec.o:qtextcodec.cpp:(.text+0x1971): undefined reference to `vtable for QCP949Codec'
./.obj/release-shared/qtextcodec.o:qtextcodec.cpp:(.text+0x198c): undefined reference to `vtable for QBig5Codec'
./.obj/release-shared/qtextcodec.o:qtextcodec.cpp:(.text+0x19a7): undefined reference to `vtable for QBig5hkscsCodec'

Я использую стандартный файл конфигурации win32-g ++ в сочетании с mingw.

Я немного погуглил, но до сих пор не знаю, откуда это взялось. Может, у кого-то из вас есть намеки на меня 😉

2

Решение

Вы можете использовать MXE для его создания. Это довольно просто. Вы просто делаете:

make qt

Он выполняет практически все автоматически, включая загрузку исходных кодов, применение необходимых исправлений для включения кросс-компиляции (что может быть причиной неудачной ручной кросс-компиляции Qt) и построение всех зависимостей. Вы можете скачать MXE с: http://mxe.cc. Прочитайте, конечно, документы о том, как кросс-компилировать программное обеспечение с ним.

Суть в том, что вместо qmake ты используешь i686-pc-mingw32-qmake (после того, как вы изменили свой PATH, чтобы включить каталог MXE, согласно документам.)

MXE строит все как статические библиотеки, поэтому при кросс-компиляции программы вы получите один файл .exe без каких-либо зависимостей ни от каких DLL.

3

Другие решения

Других решений пока нет …