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.

[参考译文] 编译器/TMS320F280049C:优化级别设置为关闭(-OFF)时、无法链接 FAST 估算器 C++项目

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/866051/compiler-tms320f280049c-failure-to-link-on-fast-estimator-c-project-when-optimization-level-is-set-to-off--ooff

器件型号:TMS320F280049C
主题中讨论的其他器件:C2000WARE

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

你(们)好

我正在为 f280049C 开发电机控制器应用、并使用基于 ROM 的 FAST 估算器进行无传感器控制。 我的代码基于 C2000Ware_MotorControl_SDK_2_00_00_00/solutions 下的 C 示例 is07_speed_control 实验室示例。

此示例针对闪存和 RAM 进行编译、优化级别设置为 off 或级别2。

我已将此代码移植到我的应用、并开发了一个基于 C++的项目、该项目覆盖了 C++类中的许多所需 C 库(Clarke/Park/iPark 等)。 如果编译器优化级别设置为-O2、则此代码会成功编译、链接并从闪存运行。  这很好、但会使调试变得困难、因为许多代码无法单步执行、或者由于编译器优化、变量不可见。

如果我将编译器优化级别设置为“关闭”,则会出现以下链接器错误....

错误#10056:重新定义符号"_exit":首先在"../src/src_lib/f28004x_fast_rom_symbols_fpu32.lib 中定义 ";在"/ti/ccs910/ccs/tools/compiler/ti-cgt-c2000_18.12.2.LTS/lib/rts2800_fpu32.lib 中重新定义 "

如果我删除这些库中的任何一个、我会得到一个或另一个库中存在的项目的未定义符号的链接器错误、这正是您所期望的。

我似乎无法通过这一步、因为我需要两者、但它们似乎都定义了"退出"。

此项目的 make 文件由 Code Composer 自动生成。

是否有其他人遇到过这种情况、或者在 C++环境中使用 FAST 估算器库是否存在问题、因此是否是工具问题?

请提供任何帮助。

谢谢

Phil

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

    请在发生这种情况时执行构建...

    [引用 user="Philip Webb"]错误#10056:重新定义符号"_exit":首先在"../src/src_lib/f28004x_fast_rom_symbols_fpu32.lib 中定义 ";在"/ti/ccs910/ccs/tools/compiler/ti-cgt-c2000_18.12.2.LTS/lib/rts2800_fpu32.lib 中重新定义"[/报价]

    在"Console"(控制台)视图中捕获所有内容(而不是问题)。  使用图标 Copy Build Log 将其保存到文件中。  使用文件扩展名.txt。  将其附加到下一个帖子。

    谢谢、此致、

    乔治

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

    你(们)好

    感谢您提供帮助。

    我已经为下面的构建附加了完整的编译器输出。。。

    e2e.ti.com/.../7612.build_5F00_log.txt

    谢谢

    Phil

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

    请添加链接器选项 --emit_references:file="refs"并重新编译。  在项目属性中、可以在 Build | C2000 Linker | Basic Options 中找到它。  这将在 Automake 目录(当前构建配置的名称)中创建一个名为 refs.txt 的文本文件。  请该文件附加到您的下一个帖子。  请勿复制内容。   

    此文本文件显示哪些段引用了符号_exit。  这应该使我们能够确定正在发生的情况,或者至少提出一些更好的问题。

    谢谢、此致、

    乔治

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

    你(们)好

    请查找随附的我的 refs.txt

    e2e.ti.com/.../refs.txt

    希望连接正确。 我只能找到插入文件选项。

    谢谢

    Phil

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

    库 f28004x_fast_rom_symbols_fpu32.lib 定义了许多函数、这些函数也是在编译器 RTS 库 rts2800_fpu32.lib 中定义的。  我假设您希望所有这些函数都来自 FAST_ROM 库。  在这种情况下、您需要将链接器选项 --reread_libs 替换--priority。  要了解原因、请在 C28x 汇编工具手册 中搜索标题 为详尽读取和搜索库的子章节。

    谢谢、此致、

    乔治