【问题标题】:Compiler defined symbol not found from code从代码中找不到编译器定义的符号
【发布时间】:2021-03-28 15:24:58
【问题描述】:

我在 MPLAB X IDE v5.45 下使用 AVR GCC 编译器 v5.4.0。 我在avr-as-pre 部分为编译器定义了一个符号。它将以下内容添加到调用的命令中:

-DF_CPU=32000000UL

在代码中我有一些这样的检查:

#ifndef F_CPU
    // do something

它实际上一些事情。看起来好像没有找到符号。 我对如何以这种方式为整个项目定义符号是错误的吗?

更新

IDE 将这些东西称为“定义的符号”:

但它实际上将它们存储为“预处理器宏”:

  <AVR-AS-PRE>
    <property key="announce-version" value="false"/>
    <property key="include-paths" value=""/>
    <property key="preprocessor-macros" value="F_CPU=32000000UL"/>
    <property key="preprocessor-macros-undefined" value=""/>
    <property key="suppress-warnings" value="false"/>
  </AVR-AS-PRE>

不幸的是,它似乎没有将它们传递给编译器:

$ grep -nrw . -e F_CPU
./nbproject/configurations.xml:117:        <property key="preprocessor-macros" value="F_CPU=32000000UL"/>

【问题讨论】:

  • 这是正确的语法,它在测试中运行良好:godbolt.org/z/dxoxMa3rc。所以可能-D 选项实际上并没有进入编译器;我不熟悉这个 IDE,所以我不确定你添加这个选项的位置是否正确。需要注意的是,您定义的不是 symbol (在链接时解析为地址的名称)而是 macro (仅用于预处理);是否有可能与混淆有关?
  • @NateEldredge,我想你是对的。我已经更新了问题。
  • 除非您的项目中确实有汇编语言文件,否则使用“avr-as-pre”部分是可疑的。 “avr-as”是 AVR 的 GNU 汇编器的名称。
  • @DavidGrayson,这是有道理的。我被pre 后缀出卖了——我猜它代表preprocessor,但我没想到as 部分!

标签: gcc c-preprocessor avr mplab


【解决方案1】:

您必须在avr-gcc &gt; Preprocessing and messages &gt; Defined symbols 部分下定义编译器符号:

【讨论】:

    猜你喜欢
    • 2020-06-16
    • 1970-01-01
    • 2014-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多