WedX - журнал о программировании и компьютерных науках

Смешивание библиотек из разных компиляторов C++

Я работаю над redhat 5.2 над проектом, который охватывает несколько разрозненных организаций. Каждая организация поставляет библиотеки, скомпилированные с различными версиями g++. В настоящее время эти версии включают 4.1.1, 4.1.2 и 4.3.1. Я пытаюсь связать все библиотеки вместе в исполняемый файл, используя 4.1.2. Какие проблемы, если таковые имеются, я могу ожидать, делая это? Кроме того, есть ли способ определить, для какого ABI создается каждая версия компилятора?


  • Сначала я подумал, что вы имеете в виду Red Hat 5.2 (Apollo), которому больше десяти лет. :) 21.05.2009

Ответы:


1

В этом документе политики ABI подробно описана совместимость между различными версиями ABI. В соответствии с этим библиотека libstdc++.so должна быть совместима, и в последний раз gcc нарушал бинарную совместимость в версии 3.4. Вы должны быть в порядке.

19.05.2009

2

GCC (сборник компиляторов GNU) определяет номера версий и совместимость.

Библиотеки G++ между 4.1.1 и 4.1.2 должны быть совместимы; ссылка на новейшее.

Библиотеки G++ версий 4.1.x и 4.2.x несовместимы; вам нужно что-то перекомпилировать.

Библиотеки G++ версий 3.x.y и 4.p.q несовместимы; вам нужно что-то перекомпилировать.

В вашем сценарии код, созданный с помощью 4.3.1, несовместим с остальными.

Либо вам придется пересобрать код, который в настоящее время скомпилирован с 4.3.x, чтобы он использовал 4.1.x, либо вам нужно перекомпилировать код, который в настоящее время скомпилирован с 4.1.x, чтобы он вместо этого использовал 4.3.x.

19.05.2009
  • Это теория, но на практике последнее изменение ABI было 3.4. 20.07.2009
  • @Edu: но в любое время в будущем может произойти изменение, которое вызовет это правило, и людей, которые стали небрежными в отношении вещей, может ждать сюрприз (необходимость перекомпилировать). 21.07.2009

  • 3

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

    19.05.2009

    4

    Не должно быть проблем с связыванием библиотек, созданных из разных версий g++, если они не указаны на веб-сайте g++. Однако важно, чтобы эти библиотеки были построены на той же платформе, что и в вашем случае, это RedHat 5.2. Библиотека, созданная для платформы, отличной от Linux/Redhat (скажем, Solaris), не будет связана с вашим exe.

    19.05.2009

    5

    IIRC, есть библиотека совместимости C++, которая используется именно для этого. Кажется, это называется libstdc++-compat.

    19.05.2009
  • Вы не можете связать вместе объекты, которые зависят от разных версий stdlibС++. 19.05.2009
  • Новые материалы

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

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

    ИИ в аэрокосмической отрасли
    Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


    Для любых предложений по сайту: [email protected]