Обратите внимание, что у gcc нет "режима выпуска" и "режима отладки", как у MSVC. Весь код это просто код. Наличие различных опций оптимизации (-O2 и -Os - это единственные, о которых вам обычно нужно заботиться, если вы не выполняете очень тонкую настройку), изменяет сгенерированный код, но не таким образом, чтобы предотвратить взаимодействие с другими ABI-совместимыми код. Как правило, вы хотите оптимизировать материал, который хотите выпустить.
Наличие опции "-g" приведет к тому, что расширенная информация о символах и исходном коде будет помещена в сгенерированные файлы, что полезно для отладки, но увеличивает размер файла (и раскрывает ваш исходный код), что то, что вы часто не хотите в «выпущенных» двоичных файлах.
Но они не эксклюзивны. У вас может быть двоичный файл, скомпилированный с оптимизацией и информацией отладки, или один без обоих.