(Кросспост из Вот, так как ни у кого нет идеи)
Здравствуйте все,
Я пытаюсь кросс-компилировать 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.
Я немного погуглил, но до сих пор не знаю, откуда это взялось. Может, у кого-то из вас есть намеки на меня 😉
Вы можете использовать MXE для его создания. Это довольно просто. Вы просто делаете:
make qt
Он выполняет практически все автоматически, включая загрузку исходных кодов, применение необходимых исправлений для включения кросс-компиляции (что может быть причиной неудачной ручной кросс-компиляции Qt) и построение всех зависимостей. Вы можете скачать MXE с: http://mxe.cc. Прочитайте, конечно, документы о том, как кросс-компилировать программное обеспечение с ним.
Суть в том, что вместо qmake
ты используешь i686-pc-mingw32-qmake
(после того, как вы изменили свой PATH, чтобы включить каталог MXE, согласно документам.)
MXE строит все как статические библиотеки, поэтому при кросс-компиляции программы вы получите один файл .exe без каких-либо зависимостей ни от каких DLL.
Других решений пока нет …