为什么可执行二进制文件包含包含头文件的路径?

时间:2015-05-09 12:22:47

标签: c++ c wxwidgets

为什么编译和链接的可执行文件包含源代码中包含的头文件路径?我正在使用wxWidgets库并使用Visual Studio 2013和gcc进行编译。这些头文件用于什么?如果它是编译器选项,我该如何禁用它以避免这种情况?

构建配置:发布,静态链接。

Example

2 个答案:

答案 0 :(得分:14)

可执行文件中可能会出现多种解释:

  • 您可能拥有可执行文件中捆绑的调试信息供调试器使用。使用strip删除它,或者不使用-g编译选项。您还应该使用NDEBUG进行编译,以禁用调试代码和断言。 Release 模式通常就是这种情况,但您可能需要仔细检查。
  • 某些功能可能会使用__FILE__进行跟踪或记录。 __FILE__在宏扩展时扩展为源文件名,可以是源文件或头文件。其中一个函数是assert():它实际上是一个扩展为测试的宏,以及一些包含当前文件名的错误报告代码。
  • 某些源可能具有static char数组形式的静态源ID,以跟踪源代码版本。这种方法已经相当陈旧,但许多旧资源仍然存在。

在源文件或头文件中查找其名称出现在可执行文件中并修复问题的内容。

答案 1 :(得分:6)

wxwidgets在其头文件中有许多断言(例如,如您所注意到的wxASSERT中),都使用wx/debug.h中定义的public boolean checkAllMatchesFound() { for (int i=0; i<MatchingGame.NUMBER_OF_CARDS; i++){ if (cards[i].isFacingUp()) return true; } return false; } 宏 要禁用这些功能,您可以在包含任何 wxwidget标头之前#define wxDEBUG_LEVEL 0