FC2ブログ
ライブラリの作り方 Linux編
Linuxでのライブラリの作り方とそのライブラリを使ってGCCでコンパイルする方法の覚書です。

題材は
猫でもわかる 第54章 ライブラリを作ろう
を使わせていただきました。

元にさせていただいたのはVC++でのライブラリの作り方ですが、
ここではLinuxでの作り方 および 使い方です。

以下、覚書ですので、さーっと ターミナルから打ったコマンドと
emacsで書いたコードを載せます。 長くて「とてもできそうにねー」
となりますが、10分ほど説明してもらえればわかります。。。
一応 最後に 説明を付けておきます。 ちなみに、分割コンパイルができる人は 誰でもライブラリを作れると思います。

読み方:
b-nakanisi@citrine% は コマンドプロンプトです

b-nakanisiが僕のユーザー名、
citrineは研究室で与えられているコンピュータの名前です。

なお ~(チルダ)で表される 僕のホームディレクトリは
/home/ruby/b-nakanisi です。

(ちなみに、先生がコンピュータ名に宝石の名前をつけるという手法をとっています)



b-nakanisi@citrine% emacs myprintf.h &
/********************************/
#include <stdio.h>

int print(char* str);
/********************************/


b-nakanisi@citrine% emacs myprintf.c &
/********************************/
#include "myprintf.h"

int print(char* str){
printf("%sと書いたね.\n",str);
return 0;
}
/********************************/


b-nakanisi@citrine% gcc -c myprintf.c
b-nakanisi@citrine% ar crs libmyprintf.a myprintf.o
b-nakanisi@citrine% mv myprintf.h ~/include/myprintf.h
b-nakanisi@citrine% mv libmyprintf.a ~/lib/libmyprintf.a
b-nakanisi@citrine% emacs main.c &
/******************************/
#include <myprintf.h>

int main(void){
print("aaa");
return 0;
}
/*******************************/


b-nakanisi@citrine% gcc -o main.exe main.c -I/home/ruby/b-nakanisi/include/
-L/home/ruby/b-nakanisi/lib/ -lmyprintf

b-nakanisi@citrine% ./main.exe
aaaと書いたね.



説明:
上から順番にいきます、
b-nakanisi@citrine% emacs myprintf.h &
で、今回作りたい ライブラリのヘッダー作成

b-nakanisi@citrine% emacs myprintf.c &
で、関数を実装する。

b-nakanisi@citrine% gcc -c myprintf.c
myprintf.o を作る

b-nakanisi@citrine% ar crs libmyprintf.a myprintf.o
arコマンドで オプションに crs を与え、
libmyprintf.a を作成。 なお、頭に lib 拡張子(?)を
.a にするのが慣習だそうです。 よって今回 myprintf.c
から 作るので libmyprintf.a

b-nakanisi@citrine% mv myprintf.h ~/include/myprintf.h
b-nakanisi@citrine% mv libmyprintf.a ~/lib/libmyprintf.a
ヘッダーファイルは ホームディレクトリ下の includeに置く。
ライブラリはホームディレクトリ下の libに置く。
なお、どこに置いても いいのですが、慣習的に
includeディレクトリにヘッダー(つまりhoge.h)
libディレクトリにライブラリ(つまりlibhoge.a)を置きたい。

b-nakanisi@citrine% emacs main.c &
ライブラリを使うソースを作成

さて、ライブラリを使うソースのコンパイルですが、
b-nakanisi@citrine% gcc -o main.exe main.c -I/home/ruby/b-nakanisi/include/ -L/home/ruby/b-nakanisi/lib/ -lmyprintf

となります。

-I ラージアイ
-L ラージエル
-l スモールエル  

は、オプションです。

-I は ライブラリを使うために必要なヘッダーファイルがどこにあるかを示します。
ヘッダーファイルを教えるのでなく ヘッダーファイルがあるディレクトリを教えるところが要注意!

-Lは ライブラリがどこにあるか教えるオプション やはり ファイルでなく ファイルがあるディレクトリを教える。

-lは 使いたいライブラリ名 ここが要注意で
libhoge.a を使いたいときは 慣習のために つかた 頭の lib と
拡張子(?)の .a をとって -lhoge とする。

なお、-I/home のように -I と /home の間にはスペースを入れていません。

-I の終りと -L の頭 つまり /include/ -L/ の間はスペースを入れています。

以上で ライブラリの作り方と使い方の説明を終わりますが、


まあ ノリは

ヘッダー作って

実装して

実装ファイルの .o(オブジェクトファイル)を作って

ar で ライブラリにして

そのライブラリを使うソースの方では
gccのオプションを使って -I でヘッダーの場所、
-L でライブラリの場所 -l でライブラリ名を教えてやる。

といったところでしょうか・・・
スポンサーサイト



コメントを投稿する
Name:
URL:
Comment:

秘密:管理者にだけ表示を許可する
トラックバック
この記事のトラックバックURL
この記事にトラックバックする(FC2ブログユーザー)
ブログ検索

プロフィール

ビンゴ中西
Perlが好きである。
プログラミング言語のほとんどは独学。独学の過程で多くのプログラム仲間にも色々教わりました。

FC2カウンター

カレンダー

03 | 2021/04 | 05
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 -

ブロとも申請フォーム

この人とブロともになる

| ホーム |