arm-linux-ld 链接问题

cq1987720 2012-03-29 12:56:15
arm-linux-ld 链接问题
最近在看韦东山的书,嵌入式linux开发完全手册 第七章 讲的是关于mmu的
我按照它的说法进行make 发现出错了 不得其解.

makefile的文件内容是
objs := head.o init.o leds.o

mmu.bin : $(objs)
arm-linux-ld -Tmmu.lds -o mmu_elf $^
arm-linux-objcopy -O binary -S mmu_elf $@
arm-linux-objdump -D -m arm mmu_elf > mmu.dis

%.o:%.c
arm-linux-gcc -Wall -O2 -c -o $@ $<

%.o:%.S
arm-linux-gcc -Wall -O2 -c -o $@ $<

clean:
rm -f mmu.bin mmu_elf mmu.dis *.o


段定义为:
SECTIONS {
.first 0x00000000 : { head.o init.o }
.second 0xB0004000 : AT(2048) { leds.o }
}

arm-linux-ld连接出现错误 :
arm-linux-ld: .first has both ordered [`.ARM.exidx' in init.o] and unordered [`.ARM.extab' in init.o] sections


这是什么意思,怎么解决?
...全文
1259 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
如意科技 2013-09-07
  • 打赏
  • 举报
回复
ARM-LINUX-GCC -NOSTDLIB 2012-03-30 13:58:51 分类: 系统运维 在韦东山的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啦。 来了就请留下您的脚印
如意科技 2013-09-07
  • 打赏
  • 举报
回复
first has both ordered [`.ARM.exidx' in init.o] and unordered [`.ARM.extab' in init.o] sections arm-linux-ld: final link failed: Bad value 我也遇到这问题
云端看夕阳 2013-06-16
  • 打赏
  • 举报
回复
遇到了同样的问题,不知道楼主是否已经解决,若解决能否分享下
草木有本心 2013-03-31
  • 打赏
  • 举报
回复
同问。。。。。。。。。。。。。
zengwujun 2012-03-31
  • 打赏
  • 举报
回复
SECTIONS {
.first 0x00000000 : { head.o init.o }
.second 0xB0004000 : AT(2048) { leds.o }
}

head.o和init.o放在first段,地址是0x00000000
leds.o放在second段中,地址是0xB0004000,这是内核地址。

.first has both ordered [`.ARM.exidx' in init.o] and unordered [`.ARM.extab' in init.o]
表明在init.o中有.exidx, .extab'有多个,你去查查exidx是怎么定义的

2,161

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 UNIX文化
社区管理员
  • UNIX文化社区
  • 文天大人
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧