我正在构建类似问题如何将不同 .a 文件中的数据收集到一个数组中的内容?如何使用 ld 脚本将部分保存在 .a 文件中?,即在链接时由来自不同目标文件的元素组成的数组。
在我的例子中,有几个数组,每个数组都有自己的部分,.ld_comp_array_*,其中 * 匹配数组的名称。然后我使用 ld --verbose 获取默认链接器脚本,并通过将所有这些部分(已排序,以便不同数组的元素不会混合)放入输出部分来修改它:
KEEP (*(SORT_BY_NAME(.ld_comp_array*)))
一切正常。
然后事情变得有点复杂,因为可以为各种平台构建使用此功能的应用程序 - 到目前为止,我已经成功尝试 AVR Xmega 作为目标平台,以及 Windows 32 位和 Linux 32 - 和用于单元测试的 64 位,并且列表是开放的(可能会在不久的将来添加新平台)。
但是,对于每个特定平台,默认链接器脚本与其他平台上的不同,目前我手动插入 .ld_comp_array* 部分 - 是否有可能以某种方式自动完成?我想到的唯一解决方案是解析默认脚本并粘贴上面的输入部分描述,但这似乎太重了。
如果没有相对简单的解决方案,我可以手动完成,但我不确定从本地版本的 ld 获得的默认脚本是否可能会在不同版本的 binutils 上中断。谁能澄清这是否安全?
如果可以自动完成,假设数组应该是“不可变的”,是否可以将输入节规范始终直接“注入”到 .text 节中?