Проблема с C++
Aug. 15th, 2024 09:49 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Берем большой-большой проект на C++, назвыается plv8. ТО есть сам plv8 не такой уж большой, но он тащит и линкует статически v8 engine - интерпретатор javascipt от Гугля, это более тысячи файлов на C++. Собираем его в дебиановский пакет под ubuntu 20.04, 22.04, debian 10, 11, 12 - работает. В куче rpm-based дистрибутивов тоже работает. Даже в AltLinux 11 и то работает.
Собираем его в Ubuntu 23.10 или 24.04 - с тем же rules-файлом, сводящимся к
make v8
make all PG_CONFIG=где-там-у-нас-сегодня-постгрес/bin/pg_config
При попытке загрузить в постгрес ругается
ERROR: could not load library "/opt/pgpro/std-15/lib/plv8-3.2.2.so": /opt/pgpro/std-15/lib/plv8-3.2.2.so: undefined symbol: _ZTVN2v88internal32WeakCollectionsBuiltinsAssemblerE
Берем so-шку (вернее даже пакет) скомпилированный в Ubuntu 22.04, ставим в 24.04 к собранному в нем постгресу - работает. То есть не просто грузится, а весь regression test suite проходит.
Почему я специально выделил выше AltLinux 11? ДА потому что в Ubuntu 23.10 и 24.04 gcc 13.2.0, в AltLinux 11 - 13.2.1, а во всех прочих поддерживаемых дистрибутивах нечто более старое. Ну 12.2.0, ну 11.4.0 или что-то такое.
Впрочем в Ubuntu 24.04 есть gcc-12. Попробовал прописать в rules CC=gcc-12 CXX=g++-12. После некоторых пинков заработало. Но лучше не стало. То есть дело тут не в версии компилятора. А скорее всего в каких-то его флагах, которые ubuntu по умолчанию подставляет при сборке пакета. Подозревал -fno-rtti. Но явное добавление -frtti не помогло.
Upd: permea_kra подкинул ссылку на баг в gcc 13 который, возможно, имеет отношение к проблеме. А, возможно, не имеет.
Upd2: Оказывается в Ubuntu noble есть не только gcc-12, но и gcc-14. Вот после сборки v8 им все работает.
no subject
Date: 2024-08-16 07:52 am (UTC)no subject
Date: 2024-08-16 08:08 am (UTC)Ну линкер там gcc-шый. 24.04: ii binutils 2.42-4ubuntu2 amd64 GNU assembler, linker and binary
23.10: ii binutils 2.41-5ubuntu1 amd64 GNU assembler, linker and binary
22.04: ii binutils 2.38-4ubuntu2.3 amd64 GNU assembler, linker and binar
Debian 12: ii binutils 2.40-2 amd64 GNU assembler, linker and binary u
AltLinux 11: binutils-2.41-alt1.x86_64
Идея что где-то запускается в качестве линкера gcc, а где-то g++ - проверена и оказалась неверной. На 24.04 можно и тем, и тем линковать, все равно не работает.
no subject
Date: 2024-08-16 08:20 am (UTC)А будущий Debian 13?
Я конечно понимаю, что поиск проблемы методом деления пополам версии _дистрибутива_ это для очень сильных духом... Но возможно это самый простой путь...
Или у нас нет возможности с Debian testing откатиться до снепшота на определенную дату?
no subject
Date: 2024-08-16 08:26 am (UTC)А будущий Debian 13, равно как будущий Ubuntu 24.10 мы еще не пробовали. Мы для таких дистрибутивов только постгрес собираем в pgfarm, а все сторонние расширения - нет. Надо будет завести на парочке pgfarm-овских контейнеров юзера builder и пособирать там пакеты.
В trixie, кстати уже приехал gcc 14, а в oracular он изначально.
no subject
Date: 2024-08-16 08:35 am (UTC)Я не уверен что это конкретная версия компилятора... Скорее всего какая-то максимально неочивидная комбинация странных факторов.
Почему я спросил про дебиан, потому что с ним в теории многие вещи должны быть сильно проще. При этом весьма вероятно что оно сломалось и в testing'е тоже.
А вот не сделать ли нам (или в данном случае скорее вам) на будущее автоматическое копирование
https://cdimage.debian.org/cdimage/weekly-builds/amd64/iso-bd/
?
Возможно это в будущем позволит более просто и автоматично понять в какой момент что-то пошло не так и локализовать подобную не очевидную проблему...
no subject
Date: 2024-08-16 10:46 am (UTC)Мы уже думаем над тем, чтобы вести архив. Но CD тут не спасут. Потому что не у всех дистрибутивов все нужное на CD попадает. Надо именно мирроры онлайн-репозиториев мониторить на предмет удаления пакетов и удаленные пакеты куда-то в архив складывать.
Особенно для RedOS. Но и для Alt тоже не помешает.
no subject
Date: 2024-08-16 11:23 am (UTC)Ага... Это хорошо.
Но там не только на удаление... А вообще фиксировать текущее состояние кмк.
no subject
Date: 2024-08-16 03:23 pm (UTC)Только. Если в репозиторий выкатывают обновление какого-то пакета, ему поднимают циферку в номере версии уже собственно пакета, а не софтины. То есть измениться in place пакет в репозитории не может. Обязательно новому содержанию (и новой sha256-сумме) будет соответствовать новое имя файла.
no subject
Date: 2024-08-16 03:57 pm (UTC)Все еще интереснее. В oracular (будущем 24.10) тоже:
Беда в том что noble (24.04) это LTS. И нам с ним еще 4 с половинй года жить.
no subject
Date: 2024-08-16 03:25 pm (UTC)Попробовал собрать в debian testing. Специально контейнер для этого развернул. Собрал в нем свежевыпущеный PostgresPro Standard 16.4.1 и к нему plv8. gcc 14.2. Работает, все тесты проходит.
no subject
Date: 2024-08-18 03:08 pm (UTC)Ага...
Крайне любопытно...