gcc 链接器 - 将存档中的所有目标文件映射到某个部分
Posted
技术标签:
【中文标题】gcc 链接器 - 将存档中的所有目标文件映射到某个部分【英文标题】:gcc linker - map all object files in an archive to a certain section 【发布时间】:2017-11-20 19:43:56 【问题描述】:在gcc
链接器文件中,如何将归档中所有.obj
s的所有函数映射到某个部分?
我知道如何在源文件中逐个函数地执行此操作,但我想在链接器文件中按.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编译器选项-Wl,--no-undefined(告诉链接器在链接过程中不允许有未定义的符号)(gcc编译器和链接器是分离的工具,它们需要通过选项来进行通信)