LINUX.ORG.RU

Есть ли решение по совмещению ABI gcc 2.x и 3.x


0

0

Парни. Всем известно о несовместимости соглашений ABI в линейках компиляторов gcc 2.x и 3.x при линковке программ. Существует (существовал) ли проект, который решает каким-либо способом эту проблему. Т.е. обеспечивается сборка программ C++, например, откомпилированных на gcc 3.x с бинарными библиотеками собранными на gcc 2.x, и наоборот.

anonymous

если не прользовать плюсы то проблем не возникает, пока не лезеш в ядро ;-)

если ты пользовал плюсы - ССЗБ

cvv ★★★★★
()

> Существует (существовал) ли проект, который решает каким-либо способом эту проблему.

Судя по тому, что в дистрибутивах идут библиотеки совместимости, такого проекта нет.

> Т.е. обеспечивается сборка программ C++, например, откомпилированных на gcc 3.x с бинарными библиотеками собранными на gcc 2.x, и наоборот.

Нет

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

> если не прользовать плюсы то проблем не возникает, пока не лезеш в ядро ;-)

А если не пишешь программ вообще, такие вопросы в принципе не волнуют

> если ты пользовал плюсы - ССЗБ

Насколько я понимаю, OP просто пришлось использовать закрытую библиотеку на Си++. С чего ты взял, что это был _его_ выбор?

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

>С чего ты взял, что это был _его_ выбор?

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

например что приложение плюсовое это однозначно указано.

а либа сишная или плюсовая? тебе интуицыя подсказывает что плюсовая а мне такого неподсказывает.

мож он хотит к своей плюсовой апликухе прилинковать к примеру оракловую OCI? которая сишная и ктомуже откомпилена gcc 2.95.xx или gcc 2.96.1xx

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

> например что приложение плюсовое это однозначно указано.

> а либа сишная или плюсовая? тебе интуицыя подсказывает что плюсовая а мне такого неподсказывает.

Ну, линковка обычно подразумевает наличие либы и приложения. К приложению исходники обычно есть. Хотя, конечно, может быть и так, что он пытается подсунуть приложению со "старым" Си++ ABI либу с "новым". Но это, ИМХО, маловероятно.

> мож он хотит к своей плюсовой апликухе прилинковать к примеру оракловую OCI? которая сишная и ктомуже откомпилена gcc 2.95.xx или gcc 2.96.1xx

А какие _здесь_ проблемы? Си ABI вроде не менялся.

Вообще, если до зарезу нужно решить такую проблему (линковка двоичной библиотеки со старым Си++ ABI в приложение с новым), можно попробовать такой трюк - сделать обертку либы с Си-интерфейсом, откомпилировать ее старым компилятором, а потом собрать из этой обертки и старой либы новую либу со статически вкомпилированным в нее старым Си++ рантаймом, и дергать ее из новой проги через Си-интерфейс. Проблема в том, что я не уверен, что можно из .so сделать еще один .so Но если либа статическая, такой способ должен сработать. Хотя это ИЗВРАЩЕНИЕ.

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

>А какие _здесь_ проблемы? Си ABI вроде не менялся.

какие? тривиальные - нелинкуется ;-)

если в системе нету старого gcc - то поставить в такую систему oracle до недавного времени было на грани фантастики.

хотя если своё приложение пишеш то проблем у меня небыло и с новыми компилерами

cvv ★★★★★
()

Парни, это мой вопрос. Большое спасибо за дискуссию. Проблема для меня достаточно серьезная и в принципе ответ на вопрос я косвенно у вас нашел: интересующего меня проекта не существует :(

А задача следующая: есть дистрибутив (бинарный), хотелось бы в нем заюзать расширенный синтаксис(перейти с 2.95 на 3.x), причем в системе все оставить по прежнему а компилировать новым компилятором (включая код C++).

Естественно самому разработать патч обратной совместимости линковщика я не возьмусь. Вот и спросил, может кто-нибудь это уже делал...

Да и конечно, не помешал бы документ с полным описанием несовместимостей линковки gcc 2.x и 3.x

anonymous
()
Ответ на: комментарий от anonymous

Здесь дело не в линковке. Изменился _ABI_ - то есть, развертка объектов в памяти, способ вызова виртуальных функций, реализация механизма обработки исключений и т.д. Так что патчем к линковщику не обойдешься. Кстати, с точки зрения будуще совместимости по ABI советую версии gcc 4.x. Смутно припоминаю, что небольшое изменение ABI было в 4.0, оно сопровождалось уверениями, что такого больше не будет.

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

Если тебе именно _изменения_, то я и сам бы хотел "ссылку иметь".

Описание нового (gcc 3.2) ABI здесь: http://www.codesourcery.com/cxx-abi Формально, оно для Итаниума.

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

вобщем надеюсь ты понял что с сями трабл не предвидется а плюсовые либы придётся пересобрать с сырцов и возможно заодно заапдейтить.

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

> А задача следующая: есть дистрибутив (бинарный), хотелось бы в нем заюзать расширенный синтаксис(перейти с 2.95 на 3.x), причем в системе все оставить по прежнему а компилировать новым компилятором (включая код C++).

_Эта_ задача как раз решаема. Просто тебе надо будет иметь отдельные с++ библиотеки для своего приложения. Как именно поставить новый компилятор и не угрохать старый я никогда не думал, но есть мысль, что гцц по дефолту именно так и собирается. Возможно проще будет использовать компилятор на другой системе, какой тебе нравится, а на бинарный твой дистрибутив переносить приложение со всеми недостающими библиотеками. Ну и архитектура должна совпадать, понятно.

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

В подбных делах здорово помог бы decompiler (собственно, 
в это задача и упирается).
Но, я боюсь, что такой "зверь" для gcc2/3 еще не родился. 

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

btw, никто не задал вопрос автору
- "а бинарная версия с debug-info"?
Что говорят nm & gdb по этому поводу?

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

Два компилятора живут абсолютно номально. Я их прикрутил через alternatives и по командочкам gccv2 и gccv3 переключаюсь между ними (т.е. 3-й я собрал из исходников, а все остальное бинарное)...

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.