Мотивация для вопроса : для генерации 64-битного и 32-битного кода требуются две отдельные полные программные компиляции, а при использовании Visual Studio (как подробно описано ниже) сборки выпуска и отладки несовместимы, поэтому, по-видимому, они кажутся несовместимыми. требуются еще две полные программы-компиляции (доведя общее количество до четырех). Я хотел бы придерживаться двух полных программных компиляций, но я в замешательстве.
При отладке все, что меня волнует: глобальное состояние, кадр стека и номер строки / файла кода, вызвавшего сбой. Кроме того, мне нет дела до отладочной информации из проверенных высокостабильных библиотек с открытым исходным кодом; поэтому мне не нужна информация отладки для этих библиотек, и сборка выпуска для этих библиотек должна быть адекватной.
Свидетельство: Я знаю, что в VS, если вы скомпилируете отладочную версию приложения и свяжете ее с версией выпуска буферов протокола Google, созданный код потерпит неудачу из-за побочного эффекта смешивания типов выпуска / отладки.
Я хотел бы знать, является ли это побочным эффектом использования visual studio, и определенный набор переключателей компилятора делает это так.
Во-вторых, при проверке сценариев / процессов сборки проектов с открытым исходным кодом кажется, что можно смешивать код, сгенерированный в режиме отладки, с кодом, сгенерированным в релизе (например, mumble ). Я предполагаю, что это как-то связано с различием между release и ReleaseWithDebugInfo (термин заимствован из cmake, но это, очевидно, можно выразить в Visual Studio). ReleaseWithDebugInfo - это, в конце концов, оптимизированная версия двоичного файла, также сгенерированная отладочная информация, и, следовательно, подходящая для выпуска.
Вопросы:
- Может, кто-нибудь объяснит или предоставит ссылки на то, какие переключатели делают код несовместимым.
- Достаточно ли стиля компиляции ReleaseWithDebugInfo в visual studio для сценариев отладки и выпуска (в соответствии с моими критериями, как описано выше)? - То есть, что генерирует компилятор в режиме отладки - избыточное или избыточное?
- В режиме ReleaseWithDebugInfo (для моего приложения) я могу скомпилировать внешние зависимости в режиме выпуска (без отладочной информации) и не иметь неопределенного поведения?