我正在尝试从目标为windows的linux下的命令行构建一个Qt应用程序。我已经使用mxe来构建一个用于定位窗口的工具链,但是我的构建失败了对各种线程相关的位。 mxe使用winpthreads构建,我知道Qt项目将使用预先打包的mingw编译器从创建者内部构建Windows。我使用我的ARM Linux交叉编译器成功构建,所以我只想让Windows完成相同的操作。我试图在构建服务器或Jenkins上为我的所有目标建立一行构建。
我猜我错过了在进行交叉工具链构建时需要传递给mxe的东西,或者缺少我需要传递给qmake以使此构建成功的东西。
答案 0 :(得分:3)
问题在于使用win32线程的GCC默认MXE版本,而不是mingws pthreads实现。
编辑src / gcc.mk并确保将winpthreads添加到$(PKG)_DEPS列表中,然后更改配置行,以便--enable-threads = win32变为--enable-threads = posix。
然后重新制作winpthreads和gcc。注意这里有一个循环依赖,你需要用win32线程(默认)构建gcc,然后用winpthreads重新编译。
感谢Andreia Gaita - http://blog.worldofcoding.com/2014/05/cross-compiling-c11-without-going-madder.html
答案 1 :(得分:0)
POSIX配置已添加到MXE(Building pthreads inline with gcc and enable optional posix threads in libgcc)。
例如,用它构建qt(x64,共享,posix线程):
make MXE_TARGETS='x86_64-w64-mingw32.shared.posix' qt