编译和链接后的可执行文件为什么包含了我的源代码中包含的头文件路径?我正在使用wxWidgets库并使用Visual Studio 2013和gcc进行编译。这些头文件有什么用途?如果这是一个编译器选项,如何禁用它以避免此问题发生?
构建配置:release,静态链接。![Example](https://istack.dev59.com/s2Akc.webp)
构建配置:release,静态链接。
![Example](https://istack.dev59.com/s2Akc.webp)
这样的字符串出现在可执行文件中可能有几种解释:
strip
命令来删除它,或者不要使用 -g
编译选项。您还应该定义 NDEBUG
来禁用调试代码和断言。这通常是 Release 模式下的情况,但您可能需要再次确认。__FILE__
进行跟踪或记录目的。 __FILE__
在宏展开点扩展为源文件名,可以是源文件也可以是头文件。其中一个这样的函数是 assert()
:它实际上是一个将展开为测试和一些包含当前文件名的错误报告代码的宏。static char
数组的静态源 id,以跟踪源代码版本。这种方法已经相当过时,但许多旧的源代码仍然使用它们。在可执行文件中出现名称的源文件或头文件中查找此类问题并予以修复。
wxDEBUG_LEVEL
设置为0,则不应存在这些字符串。要找出其余字符串的来源,您需要将它们展示给我们。 - VZ.wxWidgets的头文件中有许多断言(例如在中),所有这些都使用中定义的wxASSERT宏。
为了禁用这些断言,您可以在包含任何wxWidgets头文件之前#define wxDEBUG_LEVEL 0
。