2016-02-18 4 views
0

Мне нужно создать единый двоичный код из кода на C++, который может работать в RedHat и SuSE-дистрибутиве. Мне нужно распределить двоичный файл, потому что я не могу поделиться источниками. Работая в этих ограничениях, я решил, что одним из способов было бы отправить совместимую версию libstdC++ с моим двоичным кодом и связать ее с ней с помощью rpath или ldconfig.Создание бинарных файлов C++, которые работают на RHEL и SLES

  1. Совместимо ли libstdC++ в этой ситуации? Что оно делает?
  2. Учитывая, что Centos/RHEL 7 и OpenSuSE/SLES 11, как мне определить, какая совместимая версия libstdC++ работает на обеих ОС?

Я не могу связать статически по целому ряду причин, в том числе производных положений работы в LGPL и т.д.

+0

Скомпилировать статический двоичный файл? –

+1

Обновлен вопрос, почему я не могу связать статически. – CppNoob

ответ

0

При распространении бинарных файлов для разных дистрибутивов можно положить все зависит библиотеки (в том числе libstdC++) в пакет с вашими двоичными файлами - вы также можете установить RPATH в $ ORIGIN в своем двоичном формате, чтобы он искал библиотеки в каталоге с вашим двоичным кодом. Таким образом, он будет работать с большинством дистрибутивов Linux.

+0

Я строю одну бинарную - не разные версии ее для разных распределений. Это необычное ограничение, но так оно и есть. – CppNoob

+1

@CppNoob - ну, если вы не можете распространять что-либо около 1 файла, это не поможет. но я говорю об одном пакете (binary + libs), который работает на разных дистрибутивах, а не о разных пакетах. – ISanych

+0

Речь идет о версиях libstdC++ и совместимости ABI во всех дистрибутивах. Я понимаю, как работает rpath, но какие версии libstdC++ я должен включить - вот в чем вопрос. Какова общая стратегия для идентификации версии - с учетом целевых дистрибутивов и версий, вот в чем вопрос. – CppNoob