Да, Linux и Windows разные.Я не могу много рассказать о Windows, но с набором инструментов Linux у нас на самом деле нет раздельной сборки Debug vs Release.
У нас есть несколько вариантов:
- , какие оптимизации включены?
- следует ли выводить символы отладки?
- некоторые другие менее важные вещи.
Какой набор инструментов сборки называется "Release" или "Debug", это просто наборвариантов.например, минимальная версия выпуска CMake использует -Os -DNDEBUG
, а отладочная версия CMake использует -g
.Дистрибутивы также добавляют дополнительные опции, когда они упаковывают вещи.
Но кроме этих опций ABI одинаков, поэтому они все совместимы (за исключением опций, специально помеченных [*] - но они не используются в типичныхстроит).Так что это не имеет значения.Вы можете смешивать объекты «debug» или «release», это будет работать.
Что касается 4), то, как это делают многие дистрибутивы, они строят с разделенными отладочными символами.Это означает, что отладочная информация отправляется в отдельном файле и обычно упаковывается независимо.Например:
ii libc6:amd64 2.27-3ubuntu1 GNU C Library: Shared libraries
ii libc6-dbg:amd64 2.27-3ubuntu1 GNU C Library: detached debugging symbols
Второй пакет обычно не устанавливается.Я установил его вручную, чтобы пройти через libc6 с полной отладочной информацией.
[*] В качестве примера, посмотрите Опции генерации кода GCC .Вы увидите, что те, которые генерируют несовместимые объекты, имеют предупреждение.