Здравствуйте, plastictown, Вы писали:
P>Не так давно вышел релиз 10-го gcc с поддержкой execution и других клевых штук. Очень хочется все это использовать, однако целевая платформа — CentOS7 amd64.
P>Если упаковать все по-максимуму в бинарник (бинарник как исполняемый файл, так и so-библиотека), все равно останется зависимость от libc6 и мне скажут что-то про версию ABI и все на этом закончится.
P>Есть ли возможность запустить бинарник, собранный на свежем дистрибутиве со свежим компилятором на такой целевой ОС?
Можно использовать кросс-компиляцию: указываешь
--sysroot на sdk старой ОС и всё соберётся с ней. То есть, например, можно взять из ubuntu 12 или твоего centos7, и тогда всё соберётся с той древней версией libc (и остальных компонент), которые тогда были. Соответственно, запускаться будет под всеми версиями позже.
То есть это получается обычная сборка современным компилятором, но с указанием динамически слинковаться с произвольной старой версией библиотек.
Способ очень рабочий, но есть ещё лучше
P>Возможно ли в принципе статически приделать libc и сделать бинарник (особенно интересно для so), независимый от libc на машине?
Да, а именно, можно использовать
musl — хорошая реализация libc, допускающая полностью статическую сборку. Соответственно, на выходе получается бинарник без зависимостей от системной версии libc.
P> И попутно вопрос, почему статические библиотеки на дистрибутивах x86_64 собираются без флага -fPIC,
Э… Ну так флаг
-fPIC не бесплатен. С ним код получается более медленный. Иногда заметно.
То есть предполагается, что включать его будут только для необходимых частей, где без него не обойтись.
Здравствуйте, plastictown, Вы писали:
P>Не так давно вышел релиз 10-го gcc с поддержкой execution и других клевых штук. Очень хочется все это использовать, однако целевая платформа — CentOS7 amd64.
На RHEL-подобных дистрибутивах обычно доступны Developer Toolset. В их рамках делают обратное портирование компиляторов и вобщем-то все работате. Судя по всему на данный момент есть только
Developer Toolset 8 для CentOS и
Developer Toolset 9 для RHEL. Так что, 10-ка пока вообще никак не доступна, разве что из исходников её собрать