Компиляция с недавним gcc на RedHat6: как распространять программное обеспечение?

Мое программное обеспечение компилируется на различных операционных системах, включая RHEL7. У меня есть запрос на его запуск на RHEL6. Моя проблема заключается в том, что мой код на C ++ очень много опирается на функции C ++ 11, которых нет в gcc-4.4, а другой – с RHEL6. nullptr, auto, lambdas не поддерживаются, и в коде есть много.

Я видел, что есть способы иметь более свежие версии gcc для запуска на RHEL6, например, Developer ToolSet. Я не сомневаюсь, что смогу создать свое ПО для RHEL6.

Однако, после компиляции, скажем, gcc-6, что мне нужно предоставить с помощью двоичных файлов моего программного обеспечения? Библиотека C gcc-6? Библиотека C ++ gcc-6? Должен ли я вместо этого связывать их статически с моим двоичным кодом?

Кроме того, мое программное обеспечение упаковано в файлы .rpm и устанавливается в стандартных местах: / usr / bin, / usr / lib … Где бы я установил эти новые файлы библиотеки C и C ++ в целевой системе? (Очевидно, что не в / usr / lib, где они могут помешать стандартным!)

Изменить: Мое программное обеспечение является общим объектом, я думаю, я могу статически связать библиотеку C ++? Но как насчет программы (я не контролирую ее), которая будет использовать мой общий объект. Может ли он использовать другую версию библиотеки C ++? Не будет ли компоновщик найти много дубликатов? Похоже, я бы открыл банку червей …

Изменить: можно ли использовать более поздний gcc-компилятор со стандартной библиотекой C ++ для RHEL6?

Изменить: обратите внимание, что общий объект имеет чистый интерфейс «C» (стандартизованный).

  • Почему nm не отображает символы для /lib/i386-linux-gnu/libc.so.6?
  • Arch Linux застрял в загрузке
  • Как изменить пути к общим библиотекам (.so-файлы) для одного экземпляра терминала
  • Связь между ldconfig и ld.so.cache
  • atom не может быть запущен, потому что libgtk-x11-2.0.so.0 не найден, но ldd может найти его
  • Странное поведение с динамически загружаемыми плагинами
  • Текстовый файл занят при копировании некоторых файлов
  • Почему файлы библиотеки списка «ldd / usr / bin / firefox» не отображаются?
  • One Solution collect form web for “Компиляция с недавним gcc на RedHat6: как распространять программное обеспечение?”

    Где я могу установить эти новые файлы библиотеки C и C ++ в целевой системе? (Очевидно, что не в / usr / lib, где они могут помешать стандартным!)

    Напротив, вы должны установить эти новые библиотеки в /usr/lib/ (или что-то другое по умолчанию в целевой системе, на моем Debian они перейдут в /usr/lib/x86_64-linux-gnu/ and /lib/x86_64-linux-gnu/ ). Вам нужно заботиться о rpath -s.

    Мое программное обеспечение является общим объектом, я думаю, я могу статически связать библиотеку C ++?

    Вероятно, это не сработает для общего объекта (но может работать для исполняемого файла, а затем статически связывает libstdc++ и динамически libc.so ). Однако общий объект может быть связан с другими разделяемыми библиотеками. Обратите внимание: если вы предоставляете библиотеку C ++ 11, вашим пользователям нужен компилятор C ++ 11 (если вы не очень тщательно разработаете свою библиотеку, чтобы иметь только C-совместимый API).

    Вероятно, вы отправите некоторые файлы заголовков и должны воспользоваться pkg-config, поэтому отправляйте соответствующий файл .pc .

    Рассмотрите возможность чтения программы Library HowTo , C ++ dlopen mini HowTo & Drepper Как написать документ общей библиотеки .

    Можно ли использовать более поздний gcc-компилятор со стандартной библиотекой C ++ для RHEL6?

    Нет; стандартная библиотека C ++ тесно связана с компилятором C ++ (и может иметь другой ABI).

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

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

    Linux и Unix - лучшая ОС в мире.