Ada_Ru форум

Обсуждение языка Ада

Дистрибутивы Linux, GNAT и G++

Оставить новое сообщение

Сообщения

Vadim Godunko
Дистрибутивы Linux, GNAT и G++
2007-05-17 05:38:10

Добрый день!

 

Помнится кто-то говорил что занимается сопровождением какого-то дистрибутива Linux. Вот у меня вопрос есть к нему, да и к остальным тоже.

 

Как известно, GCC - это коллекция компиляторов. Мне интересны в этом деле три: gcc (C), g++ (C++), GNAT (Ada). Как так же известно, GNAT и gcc всегда идут в одном флаконе, а вот g++ там обычно не бывает (может это уже не так?). Путём научного тыка мы выснили, что распространение исключений через код g++ идёт более-менее предсказуемо только если GNAT и g++ основаны на одинаковой версии GCC.

 

А теперь вопрос. Как реально обстоят дела в дистрибутивах Linux? насколько часто версии GCC для GNAT не соответствует версии GCC с помощью которой собирались библиотеки самой системы?

Утверждаю про debian, но можно смело обобщать про остальные дистрибы.

 

Vadim Godunko wrote:

> Как известно, GCC - это коллекция компиляторов. Мне интересны в этом

деле три: gcc (C), g++ (C++), GNAT (Ada). Как так же известно, GNAT и gcc всегда идут в одном флаконе, а вот g++ там обычно не бывает (может это уже не так?).

Не так. gcc, g++ и gnat как правило в разных пакетах, но одной версии. Плюс иногда добавляют gnat от Ada Core отдельным пакетом.

 

А теперь вопрос. Как реально обстоят дела в дистрибутивах Linux? насколько часто версии GCC для GNAT не соответствует версии GCC с помощью которой собирались библиотеки самой системы?

 

В дебиане одновременно могут распространятся несколько версий gcc (сейчас это 3.3, 3.4, 4.1, 4.2). В версии sid часто бывает, что на текущий момент разные библиотеки были собраны разными версиями компиляторов. Но в стабильной версии это наверняка выравнивается под одну.

 

Возможно вам надо ориентироваться не на версию компилятора, а на версию

libstdc++?

-- Olleg Samoylov

Olleg Samoylov wrote:

 

Утверждаю про debian, но можно смело обобщать про остальные дистрибы.

 

Спасибо за пояснения!

 

Возможно вам надо ориентироваться не на версию компилятора, а на версию

libstdc++?

Возможно... Но это определить сложнее.

Thursday, 17. May 2007, Vadim Godunko Ви написали:

Добрый день!

>

Помнится кто-то говорил что занимается сопровождением какого-то дистрибутива Linux. Вот у меня вопрос есть к нему, да и к остальным тоже.

Реально поддерживают Аду два дистрибутива: Gentoo и Debian. Я буду соответственно от Gentoo :) (а Ludovic Brenta от Debian, но он русский не знает и соотв здесь не бывает). Еще, в Red Hat были пакеты gnat-3.15p, но было

это сделано давно и, по моему, не обновлялось.

Как известно, GCC - это коллекция компиляторов. Мне интересны в этом деле три: gcc (C), g++ (C++), GNAT (Ada). Как так же известно, GNAT и gcc всегда идут в одном флаконе, а вот g++ там обычно не бывает (может это уже не так?). Путём научного тыка мы выснили, что распространение исключений через код g++ идёт более-менее предсказуемо только если GNAT и g++ основаны на одинаковой версии GCC.

>

А теперь вопрос. Как реально обстоят дела в дистрибутивах Linux? насколько часто версии GCC для GNAT не соответствует версии GCC с помощью которой собирались библиотеки самой системы?

Про ситуацию с gcc в Debian вроде уже написали. Касаемо gnat (со слов Людовика) нуне официально поддерживаемая версия 4.1.1 (или какой то другой 4.1.х, но точно 4.1) и все библиотеки и прочеи пакеты собраны ей.

В Gentoo, в полном соответствии с принципом "выбор юзеру" вы можете использовать любую из представленных версий gcc (помимо той, которая использовалась при сборке системы, ее саму естественно тоже.) Выбор активной версии можно делать "на лету". Естественно если кто хочет собрать пол системы одним gcc, пол другим a еще третью половину с icc или чем еще, то никто мешать не будет, но и ошибки особо приниматься не будут тоже :). Принципиальное предназначение - предоставить возможность выбора там где надо. За свою глупость юзер отвеает также сам (естественно). Доступные версии: aldar gnat-gpl # eix ^gcc$

[I] sys-devel/gcc

Available versions:

(2.95) [P]*2.95.3-r9 [P]~*2.95.3-r10

(3.1) [P]*3.1.1-r2

(3.2) [P]-*3.2.2 [P]*3.2.3-r4

(3.3) [P](~)3.3.2-r7 (~)3.3.5-r1 (~)3.3.5.20050130-r1 (~)3.3.6 (~) 3.3.6-r1

(3.4) (~)3.4.1-r3 3.4.4-r1 3.4.5 (~)3.4.5-r1 (~)3.4.6 3.4.6-r1 3.4.6-r2

(4.0) ~*4.0.3 ~*4.0.4

(4.1) (~)4.1.0-r1 4.1.1 4.1.1-r1 4.1.1-r3 (~)4.1.2

{X altivec bootstrap boundschecking build d doc fortran gcj gtk hardened ip28 ip32r10k java mudflap multilib multislot n32 n64 nls nocxx nopie nossp objc objc++ objc-gc static test vanilla}

Первый номер в скобках это так называемый SLOT. То есть по одниму из вариантов

из каждого слота может быть установленно параллельно всем остальным.

В плане gnat предоставляются на данный момент gnat-gcc и gnat-gpl. Первый это ваиант от FSF (gcc) а второй, "родной" AdaCore. Каждый из них идет с несколькими слотами (gnat-gpl пока с одним, но скоро я добавлю и 4.1.3.2007).

aldar gnat-gpl # eix ^gnat-

* dev-lang/gnat-gcc

Available versions:

(3.4) (~)3.4.5-r1 (~)3.4.5-r2 (~)3.4.6

(4.1) (~)4.1.0 (~)4.1.1 (~)4.1.2

(4.2) (~)4.2.0 -- будет добавлен буквально сегодня/завтра

[U] dev-lang/gnat-gpl

Available versions:

(3.4) (~)3.4.5.1-r1 (~)3.4.5.2005 (~)3.4.6.1 (~)3.4.6.2006 (~) 3.4.6.2006-r1

(4.1) (~)4.1.3.2007[1] -- пока не добавлен, тоже скоро, пока есть проблеммы

Также присутствуют asis-gcc и asis-gpl, по версии для каждого компилятора. Есть также некоторые библиотеки (смотреть в dev-ada). Библиотеки компилируются для каждого из установленный компиляторов и "активные бинарники" переключаются автоматически вместе с переключением активного компилятора.

Таким образом, возвращаясь к вопросу,

а) при использовании Debian нужно позаботится установить соответствующий gcc и, подозреваю, им ограничится (не знаю точно как в Debian с множественными версиями gcc. Лучше спросить того, кто пользует Debian/Ubuntu или что еще Debian основанное).

б) при использовании Gentoo можно установить различные версии gcc и gnat и переключать их по мере надобности. Естественно следует заботится о том, что в момент компиляции кода содержащего Ada и c++ были активированны соетающиеся версии gcc и gnat (например gcc-4.1.2 и gnat-gcc-4.1.2).

George

Тема конечно очень интерестная. Если линковать Аду с C++ библиотеками, которые кидают прерывания. Но ведь сами программеры C++ тоже с этими библиотеками линкуются. И если формат исключений разный и зависит от версии компилятора, как вы утверждаете, то и проблемы с линковкой у программеров C++ должны быть такие же. Интерестно, как они их решают.

 

-- Olleg Samoylov

George Shapovalov wrote:

а) при использовании Debian нужно позаботится установить соответствующий gcc и, подозреваю, им ограничится (не знаю точно как в Debian с множественными версиями gcc. Лучше спросить того, кто пользует Debian/Ubuntu или что еще Debian основанное).

 

Хорошо. :-) Версия по умолчанию (альтернатива в дебиановской терминологии) обозначается как gcc. Доступ к остальным возможен как gcc-4.1 например.

 

-- Olleg Samoylov

Olleg Samoylov wrote:

 

 

Тема конечно очень интерестная. Если линковать Аду с C++ библиотеками,

которые кидают прерывания. Но ведь сами программеры C++ тоже с этими

библиотеками линкуются. И если формат исключений разный и зависит от

версии компилятора, как вы утверждаете, то и проблемы с линковкой у

программеров C++ должны быть такие же. Интерестно, как они их решают.

 

Мне это неведомо...

 

При использовании разных версий libstdc++ редактор связей выдаёт предупреждение, что мол, могут и косяки быть, но таковых нам не встречалось (Qt не использует исключения C++)

George Shapovalov wrote:

 

Спасибо за подробный рассказ!

 

Т.е. ситуация, когда C++ библиотеки собраны иной версией, чем использует GNAT вполне возможна... Это внушает некоторые опасения...

Thursday, 17. May 2007, Vadim Godunko Ви написали:

Т.е. ситуация, когда C++ библиотеки собраны иной версией, чем использует GNAT вполне возможна... Это внушает некоторые опасения...

Имеется в виду Gentoo? Ну естественно! Основным принципом Gentoo является предоставление возможности настроить систему на любую задачу (естественно в пределах разумного :)), что, конечно же, подразумевает предоставление пользователю возможности и все сделать неправильно :).

George

Vadim Godunko wrote:

Т.е. ситуация, когда C++ библиотеки собраны иной версией, чем использует GNAT вполне возможна... Это внушает некоторые опасения...

 

В последнее время для программ требующих высокую надежность я полюбил статическую линковку. :-)

 

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

 

-- Olleg Samoylov

On Thu, May 17, 2007 at 01:45:23PM +0200, George Shapovalov wrote:

знает и соотв здесь не бывает). Еще, в Red Hat были пакеты gnat-3.15p, но было

это сделано давно и, по моему, не обновлялось.

 

 

Вот смотрю RedHat Enterprise Linux AS release 4, у них сейчас

gcc-c++-3.4.6-8.0.1

libgcc-3.4.6-8.0.1

gcc-gnat-3.4.6-8.0.1

gcc-3.4.6-8.0.1

 

т.е. вроде как все одной версии. Только насколько этот GNAT рабочий я не знаю :)

 

PS Как я понимаю, рекомендуемый AdaCore путь установки распоследнего GNAT GPL - взять бинарник с сайта AdaCore и поставить. Естественно, ожидать совпадений версии системного gcc/gcc++ и gcc из gnat не

приходиться.

--

Maxim Reznik

Новое сообщение:
Страницы: 1

Чтобы оставить новое сообщение необходимо Зарегистрироваться и Войти