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.

[参考译文] J721S2XSOMXEVM:tiarmclang 链接器丢弃静态未引用的符号

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1623218/j721s2xsomxevm-tiarmclang-linker-discarding-static-unreferenced-symbols

器件型号: J721S2XSOMXEVM

您好:

tiarmclang 链接器似乎正在丢弃包含静态未引用符号的文件。 这就是我在项目中的场景:


[file.c]<-编译到存档库 (somelib.a)

静态 DrvOps driverOps __attribute__(已使用,section(“.my_drivers")“))={ 
  ...
};


linker_script.inc]


-retain=“*(.my_drivers*)"</s>“
.my_drivers   :{*(.my_drivers*)} align(4)     >__core_DDR_space 
RUN_START (__my_drivers_start__)
RUN_END (__my_drivers_end__)
大小 (__my_drivers_size__)


我已经尝试过:

-用“retain"属性“属性替换“used"。“。 (此错误报告的建议:sir.ext.ti.com/.../EXT_EP-10812)
-将--retain=“*(.my_drivers*)"作为“作为参数直接传递给链接器。

但以上都不起作用。 目前的唯一权变措施是在文件中创建一个虚拟变量、然后将“-Xlinker --undef_sym=dummyVar“传递给链接器。 但这种解决办法不是我们希望的方向。

请注意、GCC 链接器也不会发生同样的情况、当使用__attribute__(used、section(“.my_drivers")“))+链接器 keep () 选项时会保留文件。

有没有其他选择、或者我在这里做了什么错误?

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

    --保留 选项不会导致链接器从库中引入文件。  如需详细了解链接器从库中引入文件的原因、请阅读 此问题的第一个答案。  问题与您的不同、但大部分答案仍然相关。

    那么、如何强制链接器从库中引入文件?  通信 -- undef_sym= 您已经说不喜欢的 symbol_name 方法。  遗憾的是、没有其他方法。

    谢谢。此致、

    -乔治

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

    感谢您的链接。 我知道这个过程,但是,基于 GCC 链接器在链接器脚本中使用 keep() 段时引入文件的事实,我们能说这是 tiarmclang 的 idiosyncrasy ,并且没有与 tiarmclang 链接器中 keep() 的完整行为等效的吗?

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

    好的、在深入研究链接器文档后、我找到了一个解决方案。  将此函数传递给链接器可修复问题:

    -Xlinker --retain=“-lmy_lib.a<*。o>(.drivers_section)“

    它将强制链接器保留编译到给定库中的所有对象中的所有符号。