我最近升级了基于Docker的自动构建系统,以使用最新的Ubuntu:
RUN export DEBIAN_FRONTEND="noninteractive" && apt update && apt-get install -y wget g++ build-essential mingw-w64 subversion libmysqlclient-dev libgcrypt20-dev libgmp-dev libsqlite3-dev qt5-default libudev-dev python3.5 python3-lxml
RUN wget https://cmake.org/files/v3.9/cmake-3.9.3-Linux-x86_64.tar.gz
RUN tar zxf cmake-3.9.3-Linux-x86_64.tar.gz
RUN cd cmake-3.9.3-Linux-x86_64 && tar c * | tar x -C /usr
旧系统在这些命令下工作正常。新的不是,MinGW构建失败,编译器抱怨cstdlib
中的以下行找不到“ stdlib.h”:
/usr/lib/gcc/i686-w64-mingw32/7.3-win32/include/c++/cstdlib:75:15: fatal error: stdlib.h: No such file or directory
#include_next <stdlib.h>
我不知道我在旧系统中有什么版本的Qt5和MinGW,但在我构建Xenial时它已经成为标准配置。
我将cmake从手动安装的3.9.3升级到了最新的Ubuntu软件包,并且没有什么区别。
我发现这篇文章很有帮助,但已经过时了:
https://bugzilla.redhat.com/show_bug.cgi?id=1470809
我的解决方案是使用以下更改为Qt5Gui和Qt5Widgets编辑/usr/i686-w64-mingw32/lib/cmake/Qt5Core/Qt5CoreConfig.cmake和类似文件:
< set(_Qt5Core_OWN_INCLUDE_DIRS "${_qt5Core_install_prefix}/include/" "${_qt5Core_install_prefix}/include/QtCore")
---
> set(_Qt5Core_OWN_INCLUDE_DIRS "${_qt5Core_install_prefix}/include/QtCore")
即删除包含路径"${_qt5Core_install_prefix}/include/"
。
虽然可行,但我不愿意接受它作为永久性解决方案。
我的问题是:
P.s。这不是不使用CMake或Qt的mingw/include/c++/cstdlib: stdlib.h: No such file or directory的重复,并且正如该问题应明确指出的那样,错误的来源在Qt包含的CMake文件中。此外,对该问题的不可接受的答案是设置环境变量。就我而言,我使用的是QtCreator,它负责为我设置环境。
更新:我通过如上所述修改CMake文件解决了这个问题,这种状态一直存在很长时间,它实际上是永久的。我不知道Qt是否已正确修复此问题。