Подтвердить что ты не робот

Почему исполняемый двоичный файл содержит пути включенных файлов заголовков?

Почему скомпилированный и связанный исполняемый файл содержит пути заголовочных файлов, включенных в мой исходный код? Я использую библиотеку wxWidgets и компилирую с Visual Studio 2013 и gcc. Для чего используются файлы заголовков? Если это параметр компилятора, как его отключить, чтобы избежать этого?

Конфигурация сборки: выпуск, статическая привязка.

Example

4b9b3361

Ответ 1

wxwidgets имеет множество утверждений в своих файлах заголовков (например, в wx/string.h, как вы заметили), все с использованием макроса wxASSERT, определенного в wx/debug.h Чтобы отключить их, вы можете #define wxDEBUG_LEVEL 0 перед включением любых заголовков wxwidget.

Ответ 2

В исполняемом файле может появиться несколько пояснений о том, что такие строки появятся:

  • У вас может быть отладочная информация, содержащаяся в исполняемом файле для использования отладчиком. Используйте strip, чтобы удалить это, или не используйте параметр компиляции -g. Вы также должны скомпилировать с помощью NDEBUG для отключения кода и утверждений отладки. Обычно это относится к режиму Release, но вы можете дважды проверить.
  • Некоторые функции могут использовать __FILE__ для целей трассировки или ведения журнала. __FILE__ расширяется до имени исходного файла в точке расширения макроса, который может быть исходным или заголовочным файлом. Одной из таких функций является assert(): на самом деле это макрос, который расширяется до теста и некоторый код сообщения об ошибке, который включает в себя текущее имя файла.
  • Некоторые источники могут иметь статические идентификаторы источника в виде массивов static char для отслеживания версий исходного кода. Этот подход довольно устарел, но многие старые источники все еще имеют их.

Ищите такие вещи в исходных файлах или заголовочных файлах, имя которых отображается в исполняемом файле и исправляет проблемы.