1个人开发操作系统之显示变量值

虽然不能在我的操作系统中使用printf函数,去可以使用sprintf函数得到需要显示的字符串,并将字符串我的drawstring函数显示在界面。但是在这里使用sprintf函数并像普通C应用程序一样连接成可执行文件。sprintfstdio.h声明,在libc.lib里实现。我需要在ld连接的时候加入libc.lib库文件。问题是我的程序不能使用cygwinlibc.lib。我不得不重新编译这些源文件。

参照《OS自作入门》中选择的标准库源文件列表,我重新编译了如下程序:

abs.c    

atof.c   

atoi.c   

errno.c  

frexp.c  

ldexp.c  

memchr.c 

memcmp.c 

memcpy.c 

memmove.c

memset.c 

qsort.c  

sprintf.c

strcat.c 

strchr.c 

strcmp.c 

strcpy.c 

strcspn.c

strdup.c 

strlen.c 

strncat.c

strncmp.c

strncpy.c

strpbrk.c

strrchr.c

strspn.c 

strstr.c 

strtol.c 

strtoul.c

strtoul0.c

vsprintf.c

编译libc.lib函数库的Makefile内容如下:

TARGET     = libc

OBJS       = abs.o atof.o atoi.o errno.o frexp.o ldexp.o /

              memchr.o memcmp.o memmove.o memset.o qsort.o  /

              sprintf.o strcat.o strcmp.o strcpy.o strcspn.o strdup.o /

              strlen.o strncat.o strncmp.o strncpy.o strpbrk.o strrchr.o /

              strspn.o strstr.o strtol.o strtoul.o strtoul0.o vsprintf.o

 

MAKE     = make -r

CC1      = gcc 

LD                                     = ld

 

ALL :

              $(MAKE) $(TARGET).lib

%.o : %.c Makefile

              $(CC1) $*.c -c

 

$(TARGET).lib : $(OBJS) Makefile

              ar  r  $@ $(OBJS)

 

 

clean :

              -$(DELE) *.o

              -$(DELE) $(TARGET).lib

这样我就可以在bootpack.c里使用sprintf函数。

#include <stdio.h>

#define MAX_VERSION   1

#define MIN_VERSION   0

              char *str="Colimas Version";

              char s[40];

              sprintf(s,"%s %d.%d",str,MAX_VERSION,MIN_VERSION);

              drawstring(binfo->vram, binfo->scrnx, 18, 10, COL8_FFFFFF, s);

Makefile里只需要修改一下LD部分

$(LD) $(LDFLAGS) bootpack.o  func.o hankaku $(LIB)/libc.lib -o bootpack.bin

运行结果:

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值