У меня есть вопрос несколько месяцев назад, и я не могу долго отвечать на него в Google.
Справочная информация: я занимаюсь кросс-компиляцией программного обеспечения для контроллеров, основанных на руке, которые работают с дистрибутивом linux ptxdist,Полный образ linux построен с использованием креста gcc (4.5.2), созданного для glibc-2.13 и binutils-2.21.Стандарт c ++ довольно старый, поэтому я создал новый набор инструментов, который поддерживает c ++ 11 (gcc 4.8.5).Теперь он построен на основе glibc-2.20 и binutils-2.24.Я хочу использовать этот новый компилятор для моего прикладного программного обеспечения на контроллере (не полный образ, а только этот «основной» двоичный файл), который обновляется через систему управления пакетами.
Программное обеспечение, кажется, работает.Мне просто нужно установить LD_LIBRARY_PATH, указывающий на libstdc ++. So.0.19 вместо libstdc ++. So.14 для двоичного файла.Однако он не принимает новый libc, то есть libc-2.20 вместо libc-2.13.
Таким образом, двоичный файл использует libstdc ++. So.0.19, а остальная часть системы не изменяется.
Вопрос: почему это работает?Какие риски я могу ожидать, запустив это программное обеспечение и должен ли я все равно?Например, будет ли двоичный файл пропустить некоторые функции glibc-2.20 в будущем, потому что он просто получит glibc-2.13 на целевой машине?Сборка gcc-4.8.5 против glibc-2.13 невозможна.
Я уже читал, что это зависит от изменений внутри ABI: Влияние на обновление gcc или binutils
Здесь сказано, что C-код совместим, если компоновка GCC4.1 в GCC 4.8.
Спасибо!