gcc 链接器 - 将存档中的所有目标文件映射到某个部分

Posted

技术标签:

【中文标题】gcc 链接器 - 将存档中的所有目标文件映射到某个部分【英文标题】:gcc linker - map all object files in an archive to a certain section 【发布时间】:2017-11-20 19:43:56 【问题描述】:

gcc链接器文件中,如何将归档中所有.objs的所有函数映射到某个部分?

我知道如何在源文件中逐个函数地执行此操作,但我想在链接器文件中按.obj 名称执行此操作。

我找到了this post in the gcc mailing lists,但对我来说它不起作用。

我通过复制海报所做的修改了我的.ld...

.dflash_code :
  
    *archive.dlb: // this is my archive file
   >dflash

...但是没有用。

当我将__attribute__((section(".dflash_code"))) 添加到函数时,链接器报告的溢出量会减少,因此我知道链接器正在关注__attribute__

但是,我真的很想为整个存档(即.dlb)这样做。

我尝试仅基于一个 .obj 文件来做,即使这样也行不通

.dflash_code :
  
    *compile.doj //my object file
   >dflash

更新

实际上,看起来它正在工作(有点):它正在将ATI_micropython.dlb 的内容输出到.dflash_code 除了 .text部分。 p>

【问题讨论】:

【参考方案1】:

我尝试的语法是正确的。 问题是在我的链接器文件中,我有一个 SECTION 语句 above 以下 SECTION 语句

.dflash_code :
  
    *archive.dlb: // this is my archive file
   >dflash

将所有 *.text 部分放在一个已满的部分中。

即使在这种错误情况下,链接器也会生成一个.map,并且检查这个.map 表明archive.dlb 内的所有对象部分除了.text 都被放置在预期的位置.dflash_code.

我将.dflash_code 部分移到引用*.text 的部分上方,现在它可以工作了。

【讨论】:

以上是关于gcc 链接器 - 将存档中的所有目标文件映射到某个部分的主要内容,如果未能解决你的问题,请参考以下文章

我可以让 gcc 链接器创建一个静态库吗?

gcc 链接选项以查看为啥某些目标文件链接到二进制文件

链接器如何使用静态库解析引用

gcc 链接器如何获取函数的大小?

gcc编译器选项-Wl,--no-undefined(告诉链接器在链接过程中不允许有未定义的符号)(gcc编译器和链接器是分离的工具,它们需要通过选项来进行通信)

gcc 参数