Один двоичный файл для нескольких дистрибутивов Linux, один компилятор для всех
Первый вопрос: Каков наилучший способ поддержки различных "стандартных" платформ Linux с помощью одного двоичного файла C++11? Этот бинарный файл использует несколько сторонних библиотек, включая boost, zlib, xml2, openssl (все, что я могу построить статически).
Двоичный файл должен работать на различных платформах Linux для x86_64: Ubuntu 16.04 и 14.04, Centos 7.2 и Debian. Вскоре он должен работать на Darwin x86_64 и Ubuntu 16.04 на Beagle Bone Black.
Версии компиляторов по умолчанию, времени выполнения libstdC++ и libc на этих платформах сильно различаются. У меня был некоторый успех Linux на Ubuntu 14.04 с модернизированным (toolchain r-test) компилятором g++ 5.3 с использованием этих опций компилятора (обратите внимание, что не используется ключ "-static"):
-static-libstdc++ -static-libgcc -D_GLIBCXX_USE_CXX11_ABI=0
Однако это требует установки обновленного компилятора 5.3 на хосте (по умолчанию 4.9 IIRC) и некоторых библиотек времени выполнения на целевых платформах, что не является предпочтительным и создает проблемы с libc.so. Если нужно определить, что такое решение лучше, тогда я бы предпочел использовать 16.04 с новейшим g ++ или clang с переключателями, чтобы двоичный файл работал на старых платформах с минимальными изменениями по умолчанию. Да, я знаю, что, возможно, я спрашиваю о луне:)
Второй вопрос: вместо одного двоичного файла, может быть, один компилятор и libc для всех платформ, включая Darwin и Windows?
Я также рассматривал попытку использования musl для создания "более согласованно управляемого бинарного файла". Я мог бы рассмотреть возможность использования Clang вместо G ++.
Кто-нибудь с опытом / рекомендациями? Я бы очень хотел избежать поддержки отдельных компиляций и комбинаций сторонних библиотек и компиляторов, а также настроек и обновлений для каждой платформы (особенно для целей Linux, но довольно типично для разных операционных систем).
Было бы лучше использовать ту же версию того же компилятора и, возможно, ту же версию libc, но это может оказаться невозможным: clang with musl?
Спасибо