CMake / Mingw / Qt5 в Ubuntu не может найти stdlib.h - PullRequest
0 голосов
/ 10 октября 2018

Я недавно обновил свою систему автоматической сборки на основе 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.

...