交叉编译qt(linux / mingw - > windows):各种未定义的引用

时间:2012-10-23 18:31:01

标签: c++ qt mingw cross-compiling

(来自here的Crosspost,因为似乎没有人有想法)

大家好,

我正试图从我的linux交叉编译qt 4.8.3 for windows。最终的目标是构建一个静态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。

我用Google搜索了一下,但我仍然不知道,这来自哪里......也许你们中有人对我有正确的暗示; - )

1 个答案:

答案 0 :(得分:3)

您可以使用MXE来构建它。这很容易。你只需:

make qt

它自动完成所有操作,包括下载源代码,应用所需的补丁以启用交叉编译(这可能是为什么手动交叉编译Qt自己失败),以及构建所有依赖项。您可以从http://mxe.cc下载MXE。阅读有关如何与其交叉编译软件的课程文档。

它的主旨是使用qmake而不是i686-pc-mingw32-qmake(在根据文档更改PATH以包含MXE目录之后)。

MXE将所有内容构建为静态库,因此当您交叉编译程序时,您将获得一个单独的.exe文件,并且没有任何DLL的依赖项。