Orange's中碰到的一些问题

本人最近在研究orange’s这本书,感觉很不错,就是由于是初学者,经常会遇到一些问题,这里是我记录的一些问题以及通过网络搜到的一些解决方法:

1.本人由于是在ubuntu11.10 X64环境下开发,而书中默认是在32位环境下开发的,运行make everything命令时会报错:

ricky@ricky-ubuntu:/home/oranges/oranges/chapter5/i$ sudo make everything 
ld -melf_i386 -s -Ttext 0x30400 -o kernel.bin kernel/kernel.o kernel/start.o kernel/i8259.o kernel/global.o kernel/protect.o lib/klib.o lib/kliba.o lib/string.o
ld: i386:x86-64 architecture of input file `kernel/start.o' is incompatible with i386 output
ld: i386:x86-64 architecture of input file `kernel/i8259.o' is incompatible with i386 output
ld: i386:x86-64 architecture of input file `kernel/global.o' is incompatible with i386 output
ld: i386:x86-64 architecture of input file `kernel/protect.o' is incompatible with i386 output
ld: i386:x86-64 architecture of input file `lib/klib.o' is incompatible with i386 output
lib/klib.o: In function `disp_int':
klib.c:(.text+0xff): undefined reference to `__stack_chk_fail'
make: *** [kernel.bin] 错误 1

这里要解决兼容问题需要修改makefile,在cflags中添加-m32,在ldflags中添加-melf_i386可以解决兼容问题,不过修改完后先运行make clean将生成的.o文件去掉再运行make everything可以解决兼容问题,但还是有最后的klib.c问题,这是在cflags中添加-fno-stack-protector即可,这个原理不大明白,可以参见原始问答: http://forum.osdev.org/viewtopic.php?f=1&t=19434

2012-07-15


你可能感兴趣的:(Orange's中碰到的一些问题)