Каков стандартный способ решения этой проблемы?
Стандартный способ решить эту проблему - определить ваши минимальные требования и затем собрать ваш двоичный файл в таким образом, что он требует только этого минимума и ничего больше.
Например, если вы строите свою программу в дистрибутиве RedHat 7.2 и не используете C ++, ваша программа будет работать на все Linux дистрибутивов, которые не старше 20 лет.
или мне всегда нужно перестраивать свое приложение под разными ОС для его запуска?
Вы не.
В конкретном случае символа версии GLIBCXX_3.4.26
вы создали свой двоичный файл с G CC 9.0.0 (или более поздней версией): см. документ ABI .
Двоичный файл не будет работать ни в одной системе с установленной только средой выполнения G CC -8.x.
Один из способов избежать этого требования - связать с флагом -static-libstdc++
. Ваш бинарный файл будет больше (возможно, намного больше), и может потребоваться его распространение в другой форме (из-за вирусной природы GPL; уточните у своего юриста), но он будет работать на более старых дистрибутивах .
В качестве альтернативы, если вы собираете свой бинарный файл "регулярно" на основе дистрибутива на основе G CC -8.x, бинарный файл должен прекрасно работать на более новом, основанном на G CC -9.x.
Другим решением для этого является распределение вашего бинарного файла в docker контейнер, который имеет все необходимые условия.
PS Я не предлагаю вам фактически запустить физический хост RedHat-7.2. Использование изолированной виртуальной машины со старым дистрибутивом только для сборки должно работать.