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 [email protected] $(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

运行结果:

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