Chinaunix首页 | 论坛 | 博客
  • 博客访问: 271797
  • 博文数量: 41
  • 博客积分: 397
  • 博客等级: 二等列兵
  • 技术积分: 325
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-24 23:10
文章分类
文章存档

2014年(3)

2013年(20)

2012年(14)

2011年(4)

分类: 嵌入式

2013-01-18 09:53:40

1. 哪些人可以不需要学GNU-ld链接脚本?
   1)所有事务都交给编译器自动完成的,只需要写代码的
   2)只使用商业性编译器
   3)只使用avr,并且不需要实现复杂功能的

2. 哪些人可以考虑去学GNU-ld链接脚本?
   1)希望比makefile更进一步控制程序的产生
   2)希望在自己需要的存储地址上保存自己指定的数据
   3)希望实现程序在存储空间中的模块化或特殊结构的
   4)希望把不同格式的目标文件链接为一个格式
   5)最重要的一点是:希望用gcc为其他架构的处理器编写程序(而不只是avr),让它在你手中真正成为通用编译器的必要的一步


3. 学习前提:
   1)有winavr的使用经验
   2)有x86汇编基础(要求会的指令不多,有记忆即可,忘了的随时上网搜)

3. 我推荐的学习顺序:
   1)《程序的链接和装入及Linux下动态链接的实现》:http://www-128.ibm.com/developerworks/cn/linux/l-dynlink/
     如果你对编译和链接过程有一定了解,也有反编译库文件、目标文件的经验可以跳过这篇文章
   2)《GNU-ld链接脚本浅析》:http://blog.chinaunix.net/u/13991/showart_177822.html
     建议可以结合winavr的链接脚本来学习,在\avr\lib\ldscripts下,后缀为“.x”的是对应不同架构avr使用的脚本
     也可以看winavr的默认脚本,在命令行下输入“avr-ld --verbose”即可看到。
   3)《Using ld The GNU linker ld version 2》:
     这是官方的手册,参考。
   有兴趣还可以看看这篇《UNIX/LINUX 平台可执行文件格式分析》(http://www-128.ibm.com/developerworks/cn/linux/l-excutff/
如果学过arm开发工具ads的网友大概知道“分散加载文件”,现在看来其实它就是一种链接脚本。对于存储地址分配各不相同的arm实现,这是很重要的文件。
我学习gnu的开发软件时间也不长,以上有不当之处,希望大家指出。
另外,感谢IBM、北航的这些文章。
————————————————————————————————————————————
上面一些书籍,有机会要看看,呵呵

阅读(3697) | 评论(0) | 转发(2) |
给主人留下些什么吧!~~