为什么可执行二进制文件包含包含头文件的路径?
Why does the executable binary file contain paths of included header files?
为什么编译链接的可执行文件中包含我的源代码中包含的头文件的路径?我正在使用 wxWidgets 库并使用 Visual Studio 2013 和 gcc 进行编译。这些头文件是干什么用的?如果它是一个编译器选项,我该如何禁用它来避免这种情况?
构建配置:发布、静态链接。
此类字符串出现在可执行文件中可能有几种解释:
- 您可能将调试信息捆绑在可执行文件中以供调试器使用。使用
strip
删除它,或者不使用 -g
编译选项。您还应该使用定义的 NDEBUG
进行编译以禁用调试代码和断言。 Release 模式通常是这种情况,但您可能需要仔细检查。
- 某些功能可能会使用
__FILE__
进行跟踪或记录。 __FILE__
扩展为宏扩展点的源文件名,可以是源文件也可以是头文件。一个这样的函数是 assert()
:它实际上是一个扩展为测试的宏和一些包含当前文件名的错误报告代码。
- 某些来源可能具有
static char
数组形式的静态源 ID,以跟踪源代码版本。这种方法已经过时了,但许多旧资源仍然存在。
在可执行文件中出现的源文件或头文件中查找此类内容并修复问题。
wxwidgets 在其 header 文件中有许多断言(例如,如您所见,在 wx/string.h
中),所有断言都使用 wxASSERT
中定义的宏 wx/debug.h
为了禁用这些,您可以 #define wxDEBUG_LEVEL 0
在包含 any wxwidget headers.
之前
为什么编译链接的可执行文件中包含我的源代码中包含的头文件的路径?我正在使用 wxWidgets 库并使用 Visual Studio 2013 和 gcc 进行编译。这些头文件是干什么用的?如果它是一个编译器选项,我该如何禁用它来避免这种情况?
构建配置:发布、静态链接。
此类字符串出现在可执行文件中可能有几种解释:
- 您可能将调试信息捆绑在可执行文件中以供调试器使用。使用
strip
删除它,或者不使用-g
编译选项。您还应该使用定义的NDEBUG
进行编译以禁用调试代码和断言。 Release 模式通常是这种情况,但您可能需要仔细检查。 - 某些功能可能会使用
__FILE__
进行跟踪或记录。__FILE__
扩展为宏扩展点的源文件名,可以是源文件也可以是头文件。一个这样的函数是assert()
:它实际上是一个扩展为测试的宏和一些包含当前文件名的错误报告代码。 - 某些来源可能具有
static char
数组形式的静态源 ID,以跟踪源代码版本。这种方法已经过时了,但许多旧资源仍然存在。
在可执行文件中出现的源文件或头文件中查找此类内容并修复问题。
wxwidgets 在其 header 文件中有许多断言(例如,如您所见,在 wx/string.h
中),所有断言都使用 wxASSERT
中定义的宏 wx/debug.h
为了禁用这些,您可以 #define wxDEBUG_LEVEL 0
在包含 any wxwidget headers.