Как ограничить gcc определенной средой выполненияC++

Программы на C++. Форум разработчиков
Ответить
Гость
 Как ограничить gcc определенной средой выполнения

Сообщение Гость »


У нас есть конвейер CI, в котором создается множество проектов. В одном из проектов используются расширенные возможности C++ (C++20), поэтому мы обновили версию gcc до gcc-9.

Однако у нас есть несколько целевых встраиваемых систем, на которых работает Debian Buster и нет более поздних версий libc. Образы, создаваемые для образа buster, не основаны на C++20, и в их Makefile специально указан std=c++17.

Раньше все эти проекты работали нормально, однако теперь мы получаем такие ошибки:

./project: /usr/lib/arm-linux-gnueabihf/libstdc++.so.6: версия `GLIBCXX_3.4.30' не найдена (требуется ./project) ./project: /usr/lib/arm-linux-gnueabihf/libstdc++.so.6: версия `GLIBCXX_3.4.29' не найдена (требуется ./project) ./project: /usr/lib/arm-linux-gnueabihf/libstdc++.so.6: версия `GLIBCXX_3.4.26' не найдена (требуется ./project) Когда я исследую эти символы, я обнаруживаю, что g++ «ненужно» ссылается на новые версии вещей, которые на самом деле не должны (насколько я могу судить) требовать более новой версии:

objdump -T ./project | grep GLIBCXX_3.4.30 # | awk '{print $5}' | сортировать | уникальный 00000000 DF *UND* 00000000 (GLIBCXX_3.4.30) _ZNSt18condition_variable4waitERSt11unique_lockISt5mutexE objdump -T ./проект | grep GLIBCXX_3.4.29 # | awk '{print $5}' | сортировать | уникальный 00000000 DF *UND* 00000000 (GLIBCXX_3.4.29) _ZSt28__throw_bad_array_new_lengthv Конечно, мне не нужно обновлять buster->bookworm на своих периферийных устройствах, чтобы получить новый улучшенный bad_array_thrower?!

Есть ли способ сообщить gcc, чтобы он не использовал легкомысленно новые символы, если они не реализуют новые функции?

Еще раз: создаваемые проекты не используют C++20, они прекрасно компилируются и работают на gcc-8. Просто новый набор инструментов делает невозможным создание полевых устройств.
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»