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.

[参考译文] 有关根据库和应用代码中的符号进行链接的 TI Clang 兼容性的解决方法

Guru**** 2478765 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1302819/workaround-for-ti-clang-complier-regarding-linking-against-symbols-from-libraries-and-application-code

我们想看看是否有一些建议以及如何使用 TI Clang 编译器解决这种情况。

 

对于 MSP 项目、我们将生成驱动程序、同时静态库和应用程序链接到驱动程序库。 但是、某些中断处理程序没有得到正确解析。 是否有办法强制编译器从库中解析符号? 下面是我们看到的内容以及想要了解解决这些问题的方法的可视化图。

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

    是第一个屏幕截图中所示注意事项的来源。  这可能违反直觉、但这就是它的工作方式。  有关非常详细的说明以及大量示例、请参阅 《堆栈溢出》中的这篇文章。  通常、仅在不在库中的核心应用程序文件中使用强/弱符号关系。  当核心应用程序文件根本未定义符号时、期望从库中获取代码或数据。  因此、需要考虑的一种解决方案是将目标文件放入 Mspm0_startup_file.o 然后将该库放置在链接顺序的最后一个位置。

    谢谢。此致、

    -乔治

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

    我不知道 clang、但使用 gcc 及其链接器(ld)、您可以在命令行上放置"-u 符号"、以使一个符号(例如 ISR 的名称)未定义。 我不知道这是否像库那样敏感。

    由于对象和库是按照它们在命令行中出现的顺序进行链接/搜索的、因此有另一个选项。 startup 文件仅使用某个函数名定义向量。 最后一个文件包含这些函数名称的默认弱定义。 如果它们已从库中拉取、则弱定义将被忽略。