LINUX.ORG.RU

Сюрпризы сборки Qt 5.15 на GCC 15 (Qt5 EOL Official Edition посвящается...)

 , ,


0

3

Привет, ЛОР.

Пытаюсь собрать Qt 5.15.4 с GCC 15.1.1. Часть граблей знакомые, обошёл. Но выявились новые. Причём ругань не на сам кутешный файл, а на заголовочник из ICU, который у меня в системе стоит. Вызывает его подпроект в qtlocation/src/3rdparty/mapbox-gl-native.

Текст ошибки (даже двух, но вторая, вероятно, наведённая):

/usr/include/unicode/localpointer.h:561:26: ошибка: «auto» параметр недопустим в данном контексте
  561 | template <typename Type, auto closeFunction>
      |                          ^~~~
/usr/include/unicode/localpointer.h:573:76: ошибка: некорректный аргумент шаблона 2 [-Wtemplate-body]
  573 |     explicit LocalOpenPointer(std::unique_ptr<Type, decltype(closeFunction)> &&p)

Кусок самого localpointer.h:

template <typename Type, auto closeFunction>
class LocalOpenPointer : public LocalPointerBase<Type> {
    using LocalPointerBase<Type>::ptr;
public:

Подозреваю, конечно, что компилятор шарашит по либо слишком старому, либо слишком новому стандарту C++. В файле mapbox-gl-native.pro на себя обращают внимание строки

CONFIG += qt c++14 exceptions warn_off staticlib object_parallel_to_source
CONFIG -= c++1z

А рядом лежит свеженький Makefile, который qmake из этого проекта сгенерировала, и там в переменной CXXFLAGS присутствует -std=c++1y.

Как связать концы этого клубка?

★★★★★

Последнее исправление: hobbit (всего исправлений: 3)

17 стандарт вроде как нужен, но я не собирал, просто на гитхабе полно такой ругани где именно 17 плюсы для сборки нужны, иначе ругань как у тебя.

peregrine ★★★★★
()
Ответ на: комментарий от PPP328

Да, эта проблема ушла, но появилась следующая:

include/mbgl/util/geometry.hpp:9:24: ошибка: найдено «:» во вложенном спецификаторе имени, ожидалось «::»
    9 | enum class FeatureType : uint8_t {
      |                        ^
      |                        ::

Долго соображал, в чём дело, вроде бы к C++17 так давно уже можно, потом сообразил, что дело не в указании типа, а в самом этом типе. Заинклудил cstdint, пошло собираться дальше (традиционный луч поноса плюсовым инклудам вместо нормальных модулей, напоминаю, что из-за транзитивности инклудов отсутствие одного из них может никак не сказаться при сборке программы на пяти целевых системах, а на шестой выскочить из-за угла и зарядить собирающему в лоб).

Спасибо.

hobbit ★★★★★
() автор топика
Последнее исправление: hobbit (всего исправлений: 1)
Ответ на: комментарий от hobbit

Хосспади, теперь в том же mapbox-gl-native ему rapidjson не угодил:

deps/rapidjson/1.1.0/include/rapidjson/document.h: In member function «rapidjson::GenericStringRef<CharType>& rapidjson::GenericStringRef<CharType>::operator=(const rapidjson::GenericStringRef<CharType>&)»:
deps/rapidjson/1.1.0/include/rapidjson/document.h:319:82: ошибка: присваивание элементу «rapidjson::GenericStringRef<CharType>::length», доступному только на чтение [-Wtemplate-body]
  319 |     GenericStringRef& operator=(const GenericStringRef& rhs) { s = rhs.s; length = rhs.length; }
      |                                                                           ~~~~~~~^~~~~~~~~~~~

У меня соображалка поломалась. Если кто подскажет – спасибо.

hobbit ★★★★★
() автор топика
Ответ на: комментарий от hobbit

Я могу показаться назойливым, но всё же, 5.15.17 не вариант? Или ещё можно отказаться компилировать ту часть Qt, которой этот мапбокс нужен. Если, конечно, эта часть Qt не требуется.

unC0Rr ★★★★★
()
Ответ на: комментарий от hobbit

Rapidjson - устаревшее говно, которое не обновлялось с 2016го года. Старые компиляторы игнорировали такое присваивание. Это const поле, которое раньше не распознавалось как const. Можешь или:

  • сам запатчить rapidjson и самостоятельно перепаковывать в случае переезда (если тянешь из инета динамически)
  • или перейти на форк (но я не подскажу какой)
  • или найти другую либу, которая ну хотя бы не на 9 лет устарела.
PPP328 ★★★★★
()
Ответ на: комментарий от unC0Rr

Да, я в конце концов добавил к configure ключ -skip qtlocation. … И удачи тому, кому этот QtLocation таки потребуется.

Ещё в дополнение к прошлой теме в src/corelib/thread/qfutureinterface.h я заменил

    explicit QFutureInterface<void>(State initialState = NoState)

на

    explicit QFutureInterface(State initialState = NoState)

Пока собирается.

hobbit ★★★★★
() автор топика
Последнее исправление: hobbit (всего исправлений: 2)

Далее пришлось раскомментировать <cstdint> в qt3d/src/3rdparty/assimp/code/FIReader.hpp и там же в MMDPmxParser.h

В принципе, unC0Rr прав – всем этим надо заниматься на последней версии Qt 5.15.*, и если там где-то что-то не исправлено – предлагать патч, хотя я не уверен, примут ли его – позавчера, с точки зрения разработчиков, Qt5 наступил EOL.

hobbit ★★★★★
() автор топика
Последнее исправление: hobbit (всего исправлений: 2)
Ответ на: комментарий от unC0Rr

Да, можно попробовать. Рабочее зеркало по скачиванию тарболла, кстати, не подскажешь? Я могу из гита слить, но там надо долго по веткам блуждать, и (главное) потом несколько реп объединять, срезы «всё своё ношу с собой» вроде qt-everywhere-opensource-src-5.15.4.tar.xz по этому критерию поудобнее будут, всё-таки.

hobbit ★★★★★
() автор топика

Когда-то делал для себя шпаргалку по сборке Qt https://jurik-phys.net/itechnology:cpp:build

Кратко, скачивать исходники удобно через https://github.com/miurahr/aqtinstall

P.S. «не работает что ли?»

Время ожидания соединения истекло

Сайт не отвечал на запрос соединения, и браузер прекратил ожидание.

Jurik_Phys ★★★★★
()
Последнее исправление: Jurik_Phys (всего исправлений: 2)
Ответ на: комментарий от hobbit

А, ну с этим не могу помочь, мне не потестировать другие зеркала на предмет доступности. Попробуй https://mirrors.aliyun.com/qt/archive/qt/5.15/5.15.17/single/qt-everywhere-opensource-src-5.15.17.tar.xz

Официальный md5: 7b860e7d26031855a5f6636eb3867a91 qt-everywhere-opensource-src-5.15.17.tar.xz

unC0Rr ★★★★★
()
Ответ на: комментарий от hobbit

Хосспади, теперь в том же …

С такими большими пакетами как Qt не редко проблемы при сборке новыми компиляторами. Часть решений можно найти в патчах сборочных систем. Например:

AlexVR ★★★★★
()
Ответ на: комментарий от Jurik_Phys

Питонософт ради таких вещей я тащить не стал, но в статье по ссылке обнаружил baseurl зеркала, с которого в итоге успешно скачал искомый тарболл. :)

Спасибо.

hobbit ★★★★★
() автор топика

Возвращаясь к Qt 5.15.4, её, после упомянутых патчей, удалось собрать со следующей конфигурацией:

./configure -developer-build -opensource -no-pch -nomake examples -nomake tests -skip qtlocation -DQT_BUILD_TESTS_BY_DEFAULT=OFF -prefix /opt/Qt/5.15.4
hobbit ★★★★★
() автор топика