This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] 编译器/MSP430F67691:链接器:无法将.cinit 放入组的输出段

Guru**** 2693225 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/678978/compiler-msp430f67691-linker-unable-to-put-cinit-into-output-section-of-a-group

器件型号:MSP430F67691

工具/软件:TI C/C++编译器

我的链接器命令文件(部分)是

   组>闪存:
   {
      FIRST_SECTION
      {
         -lxxx.lib (.text、.const、.cinit){}
      }
      second_section
      {
         *(.text)
         *(.const)
      }
   }crc_table (MDU_crc_table、算法=CRC16_CCITT)
   .cinit      :{}crc_table (mdu_crc_table、algorit=CRC16_CCITT)> FLASH

这似乎起作用。  它创建一个 crc_table、其中包含第一个、第二个和.cinit 段的三个条目。  我想将其减少为两个条目。 我尝试使用多种不同的语法将".cinit"移动到"second_section"中、但都以某种方式失败。  例如

   组>闪存:
   {
     FIRST_SECTION
      {
         -lxxx.lib (.text、.const、.cinit){}
      }
      second_section
      {
         *(.text)
         *(.const)
         *(.cinit)
      }
   }crc_table (MDU_crc_table、算法=CRC16_CCITT)

为*(.cinit)生成#10068-D no matching section warning、但未正确应用 cinit。  有什么建议吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    有一点、.cinit 必须是连续段;不能有两个包含.cinit 输入段的不同输出段。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的建议。 您是否在 FIRST_SECTION 中引用了.cinit? 这也可能是一个问题、但当我从第一个段中删除.cinit 时、我仍然会得到"无匹配段"。

    组>闪存:

    FIRST_SECTION

    -lxxx.lib (.text、.const){} /*从此处删除了.cinit *

    second_section

    *(.text)
    *(.const)
    *(.cinit)

    }crc_table (MDU_crc_table、算法=CRC16_CCITT)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    虽然我不确定、但我很确定.cinit 输入段必须一起收集到一个也称为.cinit 的输出段中。  它们不能与其他输入段组合成不同名称的某些输出段。  我将检查该问题并返回给您。

    谢谢、此致、

    乔治

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我的最后一个答案是部分正确、部分错误。

    请参阅  MSP430嵌入式应用二进制接口中标题为变量初始化的部分。  您将了解到、必须有一个不同的输出段用于变量初始化。  段名严格来说不是规范的一部分、但通过违反命名此段.cinit 的接近通用的约定、您可能会创建比您解决的问题更多的问题。  cinit 输出段不能包含来自其他输入段的任何内容。  段类型为 SHT_TI_INITINFO、其他输出段不能是该类型。

    谢谢、此致、

    乔治