Chinaunix首页 | 论坛 | 博客
  • 博客访问: 366614
  • 博文数量: 135
  • 博客积分: 425
  • 博客等级: 下士
  • 技术积分: 599
  • 用 户 组: 普通用户
  • 注册时间: 2012-10-19 21:10
文章分类
文章存档

2014年(3)

2013年(79)

2012年(53)

分类: 系统运维

2013-07-20 10:38:49

原文地址:ARM-LINUX-GCC -NOSTDLIB 作者:duanqingshe

在韦东山的mmu实验的 Makefile 中出现:
arm-linux-ld: firtst has both ordered [`.ARM.exidx' in init.o] and unordered [`.ARM.extab' in init.o] sections
arm-linux-ld: final link failed: Bad value

此常见的错误的原因是:

编译时加上选项(-nostdlib)
 
-nostdlib
不连接系统标准启动文件和标准库文件,只把指定的文件传递给连接器。这个选项常用于编译内核、bootloader等程序,它们不需要启动文件、标准库文件。

C语言程序执行的第一条指令。并不是main函数。生成一个C程序的可执行文件时编译器通常会在我们的代码上加上几个被称为启动文件的代crt1.o,crti.o,crtend.o,crtn.o等,他们是标准库文件。这些代码设置C程序的堆栈等,然后调用main函数。他们依赖于操作系统,在裸板上无法执行,所以我们自己写一个。

所以,我们自己写的*.S汇编文件就是一个启动文件,它设置好堆栈后调用main函数。因此,我们不需要系统自带的启动文件

因此 我们只需修改其Makefile文件:

%.o:%.c

arm-linux-gcc -Wall -nostdlib -O2 -c -o $@ $<


%.o:%.S

arm-linux-gcc -Wall -nostdlib -O2 -c -o $@ $<

再次make 就ok啦。

来了就请留下您的脚印


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