Використання gcc (> = 4,8) за допомогою OBS (OpenSUSE Build Service)


3

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

Я впевнений, що повинен бути спосіб використовувати новіший компілятор з OBS, але я загубився в документації OBS. Чи може хтось вказати мене в правильному напрямку?

Відповіді:


1

Я це робив раніше для бібліотек, але не для створення інструментів, тому я не бачу, чому наступні не повинні працювати, крім питань бінарної сумісності, якщо ви створюєте будь-які бібліотеки. Як зазначає vitalyster, це не ідеальний підхід, і ви можете зіткнутися з проблемами, але технічно це можливо зробити так.

Так, як я це зробив, це включити пакунок (у вашому випадку GCC) у мій проект і встановити його зборку / використання у збірці (під сховищами) лише для архітектур, що не мають нової достатньої версії.

Я також хотів би поставити BuildRequires: gcc >= 4.8у вашу специфікацію, щоб переконатися, що новіша версія була підібрана, але це не повинно бути необхідним

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

У вашому сховищі ви можете розгалужувати існуючий пакунок, що означає, що ви можете знайти версію gcc, яка вже доступна на платформі, і використовувати її замість створення власного.


Я спробував розгалужити gcc47 на середовище RHEL, але існує багато нерозв'язних залежностей, і основна структура просто виглядає занадто різною, щоб вона працювала.
Занчій

0

Так, ви маєте рацію, OpenSUSE Build Service дозволяє створювати пакети для кількості Linux-дистрибутивів, але НІ , ви думаєте, неправильно використовувати останню версію компілятора C ++ для всіх дистрибутивів. У вашій програмі слід використовувати компілятор та бібліотеки, що надаються для розповсюдження, і OBS дозволяють перевірити сумісність вашої програми з найважливішими дистрибутивами, не потребуючи встановлення всіх. Отже, у вас є два варіанти:

  1. зробіть так, як очікувалося - перевірте дистрибутиви, які ви хочете підтримувати, і адаптуйте свій код до їх компілятора та версії бібліотек - приховайте "нові функції" за допомогою блоків препроцесора для більш нового компілятора та запишіть код сумісності для старого компілятора / бібліотеки. OBS може автоматично створити вашу програму і показати вам проблеми, і ви можете її легко виправити.
  2. використовувати останній компілятор і статично пов'язувати всі необхідні бібліотеки, включаючи поточні бібліотеки libgcc та залежні бібліотеки, щоб не залежати від компілятора / версій бібліотек, і розгорнути це в одному великому пакеті. Це спосіб, яким користуються в основному власні програми, і користувачі Linux ненавидять їх - ці програми приносять в систему кілька копій одних і тих же бібліотек, і нікому не важливо, як вони будуть оновлені - уявіть, ви використовуєте OpenSSL і пов'язуєте свою програму статично з OpenSSL 1.0.1e, у якого помилка Heartbleed - постачальник дистрибутива надсилає оновлення безпеки, і всі додатки, які використовують бібліотеку, що надає дистрибуцію, будуть безпечними при встановленні оновлення користувачем, але ваш додаток продовжуватиме використовувати вашу статично пов'язану незахищенубібліотека. Так, ви можете самостійно підтримувати всі необхідні бібліотеки та оновлювати свою програму, коли оновлення безпеки будуть готові, але це завдання постачальника дистрибуції, і ви повторите їх копітку роботу.

1
Проблема полягає в тому, що деякі C ++ 11 є частиною ArangoDB, і я думаю, я не можу їх приховати за допомогою визначень. OpenSSL - це C (а не C ++), тому слід мати можливість це динамічно пов’язувати. Тож залишається питання: як мені рухатись (2).
fceller
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.