FamilyName関数とGivenName 関数をまとめてmynameにする。 このmynameを処理系に合わせてlibmyname.aというライブラリの名 前にする。(lib+myname+.a)
arコマンドは新しくライブラリファイルを作ったり、ライブラリファイルに新し くオブジェクトファイルを追加したり、入れ換えたり、また不要になったオブジェ クトファイルを削除したりすることなどができる。
$ ar rs libmyname.a FamilyName.o GivenName.o または $ ar r libmyname.a FamilyName.o GivenName.o |
ライブラリファイルが作成されていることを確認する。
$ ls libmyname.a |
ライブラリファイルに含まれているオブジェクトファイルを確認するばあいは次 のような引数tvを使えばよい。
$ ar tv libmyname.a rw-r--r-- ------------- FamilyName.o rw-r--r-- ------------- GivenName.o |
さらにオブジェクトファイルの内容(シンボル)を確認するばあいはnmコマンドを 使えばよい。
$ nm libmyname.a FamilyName.o: 00000000 T FamilyName 00000000 t gcc2_compiled. U printf GivenName.o: 00000000 t gcc2_compiled. 00000000 T GivenName U printf |
この作成したライブラリmynameを使ってメインプログラムの WriteName.cをコンパイル・リンクし、実行ファイルwritename3を 作ってみる。
$ gcc -o writename3 WriteName.c -L. -lmyname または $ gcc WriteName.c -L. -lmyname -o writename3 |
-L ~/mylib
)。
実行ファイルwritename3を実際に実行してみる。
$ ./writename3 Manome Yoichi |
メインプログラムWriteName.cのスペースを表示するprintf(" ");
の部分
をSpaceという名前の関数にする。
#include <stdio.h> int main() { FamilyName(); // 姓 Space(); // スペース GivenName(); // 名 printf("\n"); // 改行 return 0; } |
Space関数の部分をSpace.cという名前のソースファイルにする。
void Space(void); void Space() { printf(" "); } |
Space.cをコンパイルしてオブジェクトファイルにする。
$ gcc -c Space.c |
$ ls Space.o |
このオブジェクトファイルSpace.oをライブラリファイルlibmyname.aに追加する。
$ ar rs libmyname.a Space.o |
$ ar tv libmyname.a rw-r--r-- ------------- FamilyName.o rw-r--r-- ------------- GivenName.o rw-r--r-- ------------- Space.o // 追加された。 |
このライブラリを使って、変更したメインプログラムWriteName2.cから実 行ファイルwritename4を作ってみる。
$ gcc -o writename4 WriteName2.c -L . -lmyname |
実行ファイルwritename4を実際に実行してみる。
$ ./writename4 Manome Yoichi |