Я недавно обновил свою систему автоматической сборки на основе 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
Мое решение было отредактировать / usr / i686-w64-mingw32 / lib /cmake / Qt5Core / Qt5CoreConfig.cmake и аналогичные файлы для Qt5Gui и Qt5Widgets со следующим изменением:
< 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/"
.
Пока это работает, яя не хочу принимать это как постоянное исправление.
Мои вопросы:
- это ошибка в Qt или MinGW?
- Как мне получить правильное исправление?
Ps это не дубликат mingw / include / c++ / cstdlib: stdlib.h: Нет такого файла или каталога , в котором не используются CMake или Qt, и, как следует четко указать в этом вопросе, источник ошибки находится в файле CMake, включенном в Qt.Кроме того, неприемлемым ответом на этот вопрос была установка переменной среды.В моем случае я использую QtCreator, который отвечает за настройку среды для меня.
ОБНОВЛЕНИЕ: я решил эту проблему, изменив файлы CMake, как описано выше, и это было состояние воспроизведения для такдолго это эффективно постоянно.Я не знаю, было ли это исправлено Qt.