Orange'sで出会ったいくつかの問題

1393 ワード

私は最近orange’sという本を研究しています.とてもいい感じです.初心者なので、よく問題に遭遇します.ここは私が記録した問題とネットを通じて見つけた解決方法です.
1.本人はubuntu 11.10 X 64環境で開発され、本のデフォルトは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に-m 32を追加し、ldflagsに-melf_を追加する必要があります.i 386は互換性の問題を解決できるが、修正後にmake cleanを実行すると生成される.oファイルを削除してmake everythingを実行すると互換性の問題を解決できますが、最後のklibがあります.c質問です.これはcflagsに-fno-stack-protectorを追加すればいいです.この原理はよく分かりません.元の質問を参照してください.http://forum.osdev.org/viewtopic.php?f=1&t=19434
2012-07-15