weixin_40097500
C_LG
采纳率0%
2017-12-12 12:20 阅读 1.1k

编写一个最简单的操作系统包括启动项等程序,但是Makefile文件编写有点错误

20

最近在网上看到一个站主的操作系统实践教程,但是把程序代码进行编译时出错了,就是Makefile文件有点错。但自己不知道哪里出错了。我把所有程序(init.c,bootsect.asm,Kernal.asm,loader.asm,Makefile)都放在barras这个文件夹下,但是make后出错了。请大神们指点下帮我改正下。
bootsect.asm程序
bootsect.asm程序
Kernal.asm程序
Kernal.asm程序
loader.asm程序
loader.asm程序
Makefile
Makefile文件
init.c程序
init.c程序
程序编译结果
程序编译结果

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

6条回答 默认 最新

  • aimarrow InvokerZhang 2017-12-12 13:24

    从这个编译输出来看,init.c好像没有编译成elf_i386格式,你可以看看

    *.o:*.c
        gcc $(CFLAGS)  -m elf_i386 -0s -c -o $@ $<
    

    这里有没有问题。

    还有,你这三次链接符号都找不到也挺僵

    点赞 评论 复制链接分享
  • weixin_40097500 C_LG 2017-12-12 14:20

    改成这样就能够编译生成
    init.o:init.o
    gcc -m32 -c init.c -o init.o
    不过原来是错了哪里,这样子只能把一个.c文件编译成.o文件

    点赞 评论 复制链接分享
  • lxy923 lxy923 2017-12-13 12:37

    ld是链接,-o只是编译,当然不会出错了,当链接时找不见符号就出错了,所以要看符号输出方面有什么问题。
    加个.global root试试。

    点赞 评论 复制链接分享
  • spbabyba spbabyba 2017-12-14 06:19

    汇编生成的i386位机器码 , c生成的x86-64机器码不兼容。 加上-m32就都生成i386可以link了.

    点赞 评论 复制链接分享
  • weixin_40097500 C_LG 2017-12-15 07:22

    试了,加上-m32还是失败了,编译不成功。

    点赞 评论 复制链接分享
  • xiaoleiqusheng andycle 2017-12-18 06:23

    加上-m32应该没大问题,,

    点赞 评论 复制链接分享

相关推荐