首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GCC链接器如何将一个对象文件的函数放到一个特殊的部分和内存区域?

GCC链接器如何将一个对象文件的函数放到一个特殊的部分和内存区域?
EN

Stack Overflow用户
提问于 2018-03-13 10:05:21
回答 1查看 1.7K关注 0票数 1

GCC链接器如何将一个对象文件的函数放到一个特殊的部分和内存区域?我正在为Xilinx MPSoC A53处理器构建一个独立的应用程序。使用Linaro 2.27的GNU ld。Xilinx软件是Xilinx 2017.4。我计划将大部分代码放入DDR中,并将一些关键的函数从一个文件放到片上内存中。我从Linker/sections.html中选中了“4.6.4.5.InputSection示例”。所以我创建了下面的链接器脚本。输出部分'.text_ocm‘是我添加的。

代码语言:javascript
复制
.text_ocm : {
    src/ocm_init.o(.text)
}  > psu_ocm_ram_0_MEM_0

.text : {
   KEEP (*(.vectors))
   *(.boot)
   *(.text)
   *(.text.*)
   *(.gnu.linkonce.t.*)
   *(.plt)
   *(.gnu_warning)
   *(.gcc_execpt_table)
   *(.glue_7)
   *(.glue_7t)
   *(.ARM.extab)
   *(.gnu.linkonce.armextab.*)
} > psu_ddr_0_MEM_0

但我收到了错误信息。似乎有两个'ocm_init‘。但是在我的源代码src/ocm_init.c‘中,只有一个定义“ocm_init”。

代码语言:javascript
复制
'Invoking: ARM v8 gcc linker'
aarch64-none-elf-gcc -Wl,-T -Wl,../src/lscript.ld -L../../a53a0_ddrsr_wfi_bsp/psu_cortexa53_0/lib -o "a53a0_ddrsr_wfi_step4_from_ddr.elf"  ./src/ocm_init.o ./src/gic_setup.o ./src/helloworld.o ./src/platform.o ./src/timer.o   -Wl,--start-group,-lxil,-lgcc,-lc,--end-group -Wl,--start-group,-lxil,-lmetal,-lgcc,-lc,--end-group -Wl,--start-group,-lxilpm,-lxil,-lgcc,-lc,--end-group
./src/ocm_init.o: In function `ocm_init':
C:\prj\mpsoc\v174\zcu102\a53a0_ddr\Debug/../src/ocm_init.c:1667: multiple definition of `ocm_init'
src/ocm_init.o:C:\prj\mpsoc\v174\zcu102\a53a0_ddr\Debug/../src/ocm_init.c:1667: first defined here
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-15 19:55:55

当匹配文件名时,链接器在某种程度上关心前面的./,所以要么编写

代码语言:javascript
复制
.text_ocm : {
    *src/ocm_init.o(.text)
}  > psu_ocm_ram_0_MEM_0

在链接器脚本中,或者在链接器命令行中将对象文件引用为src/ocm_init.o

(这并不是很直观的原因,为什么这个遗漏会导致多个定义,但是我可以重现您的问题,而更改可以修复它。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49253291

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档