Почему исполняемый двоичный файл содержит пути включенных файлов заголовков?
Почему скомпилированный и связанный исполняемый файл содержит пути заголовочных файлов, включенных в мой исходный код? Я использую библиотеку wxWidgets и компилирую с Visual Studio 2013 и gcc. Для чего используются файлы заголовков? Если это параметр компилятора, как его отключить, чтобы избежать этого?
Конфигурация сборки: выпуск, статическая привязка.
![Example]()
Ответы
Ответ 1
wxwidgets имеет множество утверждений в своих файлах заголовков (например, в wx/string.h
, как вы заметили), все с использованием макроса wxASSERT
, определенного в wx/debug.h
Чтобы отключить их, вы можете #define wxDEBUG_LEVEL 0
перед включением любых заголовков wxwidget.
Ответ 2
В исполняемом файле может появиться несколько пояснений о том, что такие строки появятся:
- У вас может быть отладочная информация, содержащаяся в исполняемом файле для использования отладчиком. Используйте
strip
, чтобы удалить это, или не используйте параметр компиляции -g
. Вы также должны скомпилировать с помощью NDEBUG
для отключения кода и утверждений отладки. Обычно это относится к режиму Release, но вы можете дважды проверить.
- Некоторые функции могут использовать
__FILE__
для целей трассировки или ведения журнала. __FILE__
расширяется до имени исходного файла в точке расширения макроса, который может быть исходным или заголовочным файлом. Одной из таких функций является assert()
: на самом деле это макрос, который расширяется до теста и некоторый код сообщения об ошибке, который включает в себя текущее имя файла.
- Некоторые источники могут иметь статические идентификаторы источника в виде массивов
static char
для отслеживания версий исходного кода. Этот подход довольно устарел, но многие старые источники все еще имеют их.
Ищите такие вещи в исходных файлах или заголовочных файлах, имя которых отображается в исполняемом файле и исправляет проблемы.