ld 用法----gcc 过程最后一步----链接
来源:互联网 发布:eclipse怎么写sql语句 编辑:程序博客网 时间:2024/06/06 04:08
今天把vivi所用到的ld的用法都看懂了,常见的选项含义也清楚了。翻看了一下kernel的链接脚本,发现相当复杂,并且需要对全局有很好的把握,对整个的地址空间分配也必须清楚。这点暂时还做不到,属于后续工作。先把ld的基本用法总结一下,因为《Linkers and Loaders》还没有读完,所以暂时还不能作出总结。不过,对链接和加载已经有了更深入的认识。在读using ld时,很多地方自然就理解了。慢慢来,把这块知识体协理顺。
LINKFLAGS = -Tarch/vivi.lds -Bstatic
SECTIONS {
. = TEXTADDR;
.text : { *(.text) }
.data ALIGN(4) : { *(.data) }
.bss ALIGN(4) : { *(.bss) *(COMMON) }
}
LDSCRIPT = arch/vivi.lds.in
ifeq ($(CONFIG_ARCH_S3C2410),y)
MACHINE = s3c2410
ifeq ($(CONFIG_S3C2410_NAND_BOOT),y)
TEXTADDR = 0x33f00000
else
TEXTADDR = 0x00000000
endif
endif
vivi: $(HEAD) arch/vivi.lds
arch/vivi.lds: $(LDSCRIPT)
@sed s/TEXTADDR/$(TEXTADDR)/ $(LDSCRIPT) >$@
SECTIONS {
. = 0x33f00000;
.text : { *(.text) }
.data ALIGN(4) : { *(.data) }
.bss ALIGN(4) : { *(.bss) *(COMMON) }
}
SECTIONS表示段。第一行表示当前地址为0x33f00000,就是VMA,同时也是text段的起始地址。第二行用了通配符*表示所有字符,这里的意思就是说指定的每个目标文件的text section的内容都放到同一个.text中。第三行表示指定的每个目标文件的data section的内容都放到同一个.data中,而且要四字节边界对齐。第四行表示指定的每个目标文件的bss section的内容都放到同一个.bss中,所有的普通符号都放到COMMON中,而且要四字节边界对齐。
这算是最为简单的ld scripts,不过也够用了。如果不考虑对齐等因素,则可以直接在命令行中指定-Ttext 0x33f00000,就可以完成了。当然,对Linux kernel等,ld scripts要处理复杂的内存分配等操作,相应的要复杂一些,读那些的方法就是查阅using ld手册,同时还要研究MCU的内存分配,这样才能作出合理的安排。
- ld 用法----gcc 过程最后一步----链接
- ld 用法----gcc 过程最后一步----链接
- ld 用法----gcc 过程最后一步----链接
- GCC/LD编译链接潜规则
- GNU GCC使用ld链接器进行链接的完整过程是怎样的
- gcc 链接合并过程
- 揪出gcc默认使用的ld链接脚本
- 揪出gcc默认使用的ld链接脚本
- GCC 编译链接命令用法
- GCC 编译链接命令用法
- GCC/LD编译链接潜规则 (第二弹) : 为什么总链接失败? --LD对依赖库的输入顺序敏感
- Win8下编译openssl成功 最后一步链接出问题的解决办法
- 查看gcc编译链接的过程
- GCC 显示程序详细编译-链接过程
- GCC编程过程:预处理-编译-汇编-链接
- GCC编译过程:预处理-编译-汇编-链接
- 解决mysql start service安装过程中最后一步失败的问题
- App的启动过程(5)ViewTree遍历中最后一步的Draw
- python socket3 dir/cd/md指令操作 下载文件
- 闪屏页
- applicationId VS package
- 奇数值结点链表
- Kotlin-12.扩展函数和属性(extensions)
- ld 用法----gcc 过程最后一步----链接
- 择校
- 原系统改造的思维扩张之路---交易系统
- NYOJ:23-取石子(一)
- 网络编程调参学习————三次握手中的接收缓存和通告窗口
- 引导页
- Redis学习——Redis事务
- SpringMvc @InitBinder 表单多对象精准绑定接收
- Docker的四种网络模式