最近在网上看到一个站主的操作系统实践教程,但是把程序代码进行编译时出错了,就是Makefile文件有点错。但自己不知道哪里出错了。我把所有程序(init.c,bootsect.asm,Kernal.asm,loader.asm,Makefile)都放在barras这个文件夹下,但是make后出错了。请大神们指点下帮我改正下。
bootsect.asm程序
Kernal.asm程序
loader.asm程序
Makefile
init.c程序
程序编译结果
从这个编译输出来看,init.c
好像没有编译成elf_i386
格式,你可以看看
*.o:*.c
gcc $(CFLAGS) -m elf_i386 -0s -c -o $@ $<
这里有没有问题。
还有,你这三次链接符号都找不到也挺僵
改成这样就能够编译生成
init.o:init.o
gcc -m32 -c init.c -o init.o
不过原来是错了哪里,这样子只能把一个.c文件编译成.o文件
ld是链接,-o只是编译,当然不会出错了,当链接时找不见符号就出错了,所以要看符号输出方面有什么问题。
加个.global root试试。
汇编生成的i386位机器码 , c生成的x86-64机器码不兼容。 加上-m32就都生成i386可以link了.
试了,加上-m32还是失败了,编译不成功。
加上-m32应该没大问题,,