Компиляция с недавним 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» (стандартизованный).

  • Как запустить приложение, скомпилированное в более новой версии Ubuntu в старой?
  • Почему файлы библиотеки списка «ldd / usr / bin / firefox» не отображаются?
  • Связь между ldconfig и ld.so.cache
  • Можно ли настроить динамический загрузчик для исполняемого файла
  • Распространение приложения с .so-файлами?
  • Как установить путь локальной общей библиотеки после установки возможностей файлов в Debian?
  • Какова правильная компоновка символических ссылок, позволяющих совместно использовать совместно используемые библиотеки openssl 1.1.0 и 1.0.2?
  • Как добавить зависимости в библиотеке debian / control?
  • 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.

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

    Interesting Posts

    Почему выход free -h использует разные разделители цифр при запуске cron?

    Формирование трафика с помощью tc не работает

    Unix: поиск файлов конфигурации службы в файловой системе

    Я думаю, что мой образ гибернации в зашифрованном разделе подкачки поврежден?

    Изменение текущего каталога с помощью скрипта (ksh)

    Как удалить диск из RAID1, не зная имя / dev / XXX?

    Позиция курсора, перетаскивание и изменение размеров окон … с несколькими мониторами

    Что касается вывода «df -h» в Linux

    не удается создать стандартное разрешение файла

    доступ к Maildir локально с Mutt и удаленно через IMAP одновременно

    FTP на Linux RH – застрял на 150 Ascii

    Как я могу перечислить все * .doc файлы в Zip-архиве, включая файлы в подкаталогах?

    Не может ssh на мой сервер из домашнего linux, но может ssh на тот же сервер из окон

    Загрузочное изображение с драйверами LAN

    Запуск приложения без оформления заголовка и окна

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