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.

[参考译文] MSPM0L2228:具有 GCC 编译器和链接器警告以及"new"行为的示例项目

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1445801/mspm0l2228-example-projects-with-gcc-compiler-and-linker-warnings-and-the-behaviour-of-new

器件型号:MSPM0L2228

工具与软件:

我开始在自己的项目中看到一些意外的构建错误、并已返回到 LaunchPad MSPM0L2228上的示例中以尝试并了解正在发生的情况。

目前我可以看到两个问题:

  • 以 C++项目为例会生成6条警告消息。
  • 扩展 C++工程以使用单个模式会导致链接器错误、这只能通过与库 STDC++_nano 链接来解决。

下面详细说明了这些内容、我能不能问我是否操作错误或缺少库?

C++工程警告消息:

采用 SDK 示例中的 gpio_toggle_output_cpp 工程并使用 GCC 12.2.1构建该工程会生成以下警告:

这些警告似乎没有阻止编译工作、但是我们想解决这些警告、好像我们没有链接所需的所有内容。

除此之外、对于示例 C++项目、我们希望链接 C++库、但示例项目中仅链接以下内容:

单个模式的 C++工程链接器错误:

使用相同的  GPIO_toggle_output_cpp 工程、并添加了简单类:

并使用在 main 中实例化  

MyTest tester = MyTest::getInstance()
会导致以下链接器错误:
与 STDC++链接会使问题变得更糟:
再次更改为与 STDC++_nano 链接导致编译成功、但仍然显示初始工程的原始警告:

进一步测试确定可以从 main 或非静态且没有错误且不需要与任何其他库链接的类方法调用 new。

我目前不理解这种情况的根本原因是什么、因此非常感谢您提供任何帮助。

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

    关于警告消息:我在不同的上下文(不是在 TI)中遇到此问题、并且与新("改进")版本的 GCC 链接器有关。 据我所知,这些情况总是存在,但现在只报告;警告本身是无害的(但恼人)。

    此处提供了权变措施:

    https://community.st.com/t5/stm32cubeide-mcus/cube-ide-1-15-0/m-p/656557

    我不知道其他误差。

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

    谢谢、这样就可以解决警告问题。

    我发现 TI MSPM0需要用于源代码行的不同位置。

    该代码是 SDK 启动文件中所必需的、而不是用户应用程序中所需的。