Использование gcc (>= 4.8) с OBS (openSUSE Build Service)

в настоящее время я использую службе сборки openSUSE (https://build.opensuse.org/), чтобы построить ArangoDB. Однако для некоторых новых функций C++ мне нужен довольно современный компилятор C++. Для некоторых старых дистрибутивов (например, Debian6 или CentOS) компилятор по умолчанию слишком стар.

Я почти уверен, что должен быть способ использовать более новый компилятор с OBS, но я заблудился в документации OBS. Может кто-нибудь указать мне правильное направление?

8
задан fceller
19.12.2022 8:10 Количество просмотров материала 3538
Распечатать страницу

2 ответа

Я делал это в прошлом для библиотек, но не для инструментов сборки, поэтому я не понимаю, почему следующее не должно работать, кроме проблем двоичной совместимости, Если вы строите какие-либо библиотеки. Как отметил vitalyster, это не идеальный подход, и вы можете столкнуться с проблемами, но технически возможно сделать это таким образом.

способ, которым я это сделал, - включить пакет (в вашем случае GCC) в мой проект и установить его сборку / использование в сборке (в репозиториях) только для сборки для архитектур, которые не имеют достаточно новой версии.

Я бы поставил BuildRequires: gcc >= 4.8 в вашей спецификации, чтобы обеспечить более новую версию взял, но это не должно быть необходимо

пример может быть найден в https://build.opensuse.org/project/monitor/X11:Enlightenment:Factory пакета luajit доступен только в openSUSE: Factory репозиторий, поэтому у меня есть копия в репозитории, которая строится для всего, кроме openSUSE: Factory, который использует в репозитория.

в вашем репозитории вы можете ветвь существующего пакета это означает, что вы можете найти версию gcc, которая уже доступна на obs и использовать ее вместо создания своей собственной.

1
отвечен simotek 2022-12-20 15:58

Да, вы правы, сервис сборки OpenSUSE позволяет собирать пакеты под количество дистрибутивов linux, но нет, вы считаете неправильным использовать последнюю версию компилятора C++ для всех дистрибутивов. Ваше приложение должно использовать компилятор и библиотеки, предоставляемые дистрибутивом, и OBS позволяют вам тестировать совместимость вашего приложения с большинством основных дистрибутивов, без необходимости устанавливать их все. Таким образом, у вас есть два варианта:

  1. делать вещи, как ожидается-проверьте дистрибутивы, которые вы хотите поддерживать и адаптировать свой код к их версии компилятора и библиотек-скрыть "новые функции" с блоками препроцессора для нового компилятора и написать код совместимости для старого компилятора/библиотеки. OBS может автоматически создавать приложения и показать вам проблемы, и вы можете легко это исправить.
  2. использовать последний компилятор и связать статически все необходимые библиотеки, включая текущую libgcc и зависимые библиотеки, чтобы не зависеть от дистрибутива компилятор / библиотеки версии, и развернуть это в одном большом пакете. Это способ, который используется в основном проприетарными приложениями и пользователями linux ненавижу их - эти приложения приносят в систему несколько копий одной и той же библиотеки, и никого не волнует, как они будут обновляться - представьте, что вы используете OpenSSL, и связываете свое приложение статически с OpenSSL 1.0.1 e, которые имеют Heartbleed ошибка - поставщик рассылки отправляет обновления для системы безопасности, и все приложения, которые использование библиотеки, поставляемой с дистрибутивом, будет безопасным при установке обновления пользователем, но ваше приложение будет продолжать использовать статически связанный insecure библиотека. Да, вы можете самостоятельно обслуживать все необходимые библиотеки и обновлять приложение, когда обновления для системы безопасности будут готовы, но это работа поставщика дистрибутива, и вы будете повторять их тяжелую работу.
0
отвечен vitalyster 2022-12-20 18:15

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх