X 86アーキテクチャに基づくOSカーネル設計の雑記(三)


GCCスタティックライブラリ作成
現在、open、read、writeなどのシステム呼び出しを使用する簡単なユーザープロセスが実現されています.私はこのプロセスを簡単なインタラクティブプロセス「shell」として、キーボードからコマンドを受信して実行するつもりです.そのため、私たちは別のプロセスが必要です.「shell」プロセスはforkとexecシステム呼び出しを通じて、この新しいプロセスを実行し、その後、より多くの基礎コマンドを実現します.したがって,strlen,sprintf,open,read,writeなどのcライブラリ関数の大部分は再カプセル化する必要があり,ここでは静的ライブラリの方法を用いた.
gccはソースファイルをターゲットファイルに生成する.o後、arツールを介して、oファイルを1つにパッケージする.a静的ライブラリファイルldツールを呼び出すときに、その静的ライブラリをインポートしてリンクすることで、ライブラリファイルコードを単独で維持することができ、複数のコピーによるメンテナンス上の困難を回避することができる.
具体的な操作は以下の通りである:1,gcc生成.oファイル(ここでは一時的に1つのファイルしかありませんが、その後はさらに多くなります):gcc -Wall -O2 -g -I ../include -fno-stack-protector -fno-builtin -nostdinc -c -o libc.o libc.c、arパッケージすべて.oファイルar crv libos.a libc.o arは複数の.oファイルを同時に入力できます.ここでは1つしかありません.生成された静的ライブラリファイルは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これにより,統一されたライブラリファイルが生成され,後続に共通の関数があり,いずれも中に投げ込むことができる.