基于X86架构的OS内核设计之杂记(三)

GCC静态库制作

目前已经实现一个简单的用户进程,可以使用open,read,write等系统调用,我打算将该进程作为一个简单的交互进程"shell",她从键盘接收命令并执行,所以我们需要另外一个进程,"shell"进程通过fork和exec系统调用,执行这个新的进程,后续还要实现更多的基础命令,因此大部分c库函数如strlen,sprintf和系统调用如open,read,write等都需要重新封装一下,这里就使用了静态库的方法。

gcc 将源文件生成目标文件.o后,通过ar工具,将.o文件打包为一个.a静态库文件,待调用ld工具时,将该静态库导入并链接,这样,库文件代码可以单独维护,避免多个副本带来维护上的困难。

具体操作如下:
1,gcc生成.o文件(这里暂时只有一个文件,后续会更多):
gcc -Wall -O2 -g -I ../include -fno-stack-protector -fno-builtin -nostdinc -c -o libc.o libc.c
2,ar打包所有.o文件
ar crv libos.a libc.o
ar可以同时输入多个.o文件,这里仅有一个,生成的静态库文件叫libos.a
3,使用时连接导入:
ld -Tsh.lds -Map sh.map -o sh.elf main.o -L../lib/ -los
其中-L…/lib/指定库文件的路径, -los指定库文件为libos.a,-l会去掉库文件名lib和后缀.a,所以-los就是libos.a
这样,一个统一的库文件就生成啦,后续有公共的函数,都可以往里面扔。

你可能感兴趣的:(操作系统内核实现,OS内核)