我正在尝试将应用程序交叉编译到另一个系统。我创建了所有依赖项并开始编译。然后使用我的一个依赖库(即Qt3)停止,导致编译器错误:
错误:“{”标记
之前的预期类名
和
错误:“QMutex”未命名类型
我怀疑Q_EXPORT
符号定义错误,因为我忘记模拟某些环境设置。但是因为它的定义取决于依赖于符号的符号,依此类推,所以很难检查。
只是在测试程序中输出它是不起作用的,因为Q_EXPORT
的值并不总是可以转换为字符串。
我的问题是: 如何使用GNU编译器检查预处理器符号的值(在编译/预处理时)。
我认为会有一个选项,但我在网上搜索时找不到任何东西。
答案 0 :(得分:1)
调试宏符号可能很棘手,因为它发生在实际编译之前[1]。以打印实际编译命令的方式运行构建系统是一个很好的起点。
然后,您可以获取实际的编译命令,并将-c
替换为-E
或类似的东西,以检查实际生成的预处理器输出。然后找到您正在编译的源中的实际位置 - 期望-E
的输出为巨大 - 百万行输出并不罕见。使用#file和#line预处理程序符号来跟踪您所在的文件以及您所在的行。
[1]在所有编译器中并不严格如此,为了准确地解决宏使得很难遵循代码实际执行的问题,现代编译器在正确解析代码期间扩展宏。但是,显然这在特定情况下并没有帮助。