ライブラリの作り方 Linux編
Linuxでのライブラリの作り方とそのライブラリを使ってGCCでコンパイルする方法の覚書です。
題材は
猫でもわかる 第54章 ライブラリを作ろう
を使わせていただきました。
元にさせていただいたのはVC++でのライブラリの作り方ですが、
ここではLinuxでの作り方 および 使い方です。
以下、覚書ですので、さーっと ターミナルから打ったコマンドと
emacsで書いたコードを載せます。 長くて「とてもできそうにねー」
となりますが、10分ほど説明してもらえればわかります。。。
一応 最後に 説明を付けておきます。 ちなみに、分割コンパイルができる人は 誰でもライブラリを作れると思います。
読み方:
b-nakanisi@citrine% は コマンドプロンプトです
b-nakanisiが僕のユーザー名、
citrineは研究室で与えられているコンピュータの名前です。
なお ~(チルダ)で表される 僕のホームディレクトリは
/home/ruby/b-nakanisi です。
(ちなみに、先生がコンピュータ名に宝石の名前をつけるという手法をとっています)
題材は
猫でもわかる 第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 でライブラリ名を教えてやる。
といったところでしょうか・・・
スポンサーサイト
≪帰りに・・・
|
ホーム|
10代の男女比較≫
ブログ検索
プロフィール
ビンゴ中西
Perlが好きである。
プログラミング言語のほとんどは独学。独学の過程で多くのプログラム仲間にも色々教わりました。
プログラミング言語のほとんどは独学。独学の過程で多くのプログラム仲間にも色々教わりました。
最近の記事
- Rubyについて (03/23)
- 公開鍵暗号方式 (02/24)
- JavaScriptのすごくつまづきやすいところ (02/22)
- こういうのって邪道かなぁ (02/21)
- じゃんけんの問題がやっとわかった (02/20)
FC2カウンター
最近のコメント
- ビンゴ中西:Rubyについて (03/24)
- ujihisa:Rubyについて (03/23)
- koduki:JavaScriptのすごくつまづきやすいところ (02/27)
- ビンゴ中西:apache2 (02/21)
- のざわ:apache2 (02/20)
- ビンゴ中西:Kansai.pm第10回で発表させていただきました (01/26)
- のざわ:Kansai.pm第10回で発表させていただきました (01/26)
最近のトラックバック
- もぼなもな書房:入門Perl DBI (05/26)
- ???:Υ??? if else if ä? JavaScript (10/10)
- AzureStone Memo:[kansai.pm]Kansai.pm 第10回ミーティング レポート (08/19)
- 404 Blog Not Found:perl - Inside-out Object (03/11)
- deq blog:[プログラミング] 関数と演算子 (12/13)
カテゴリー
- 未分類 (688)
- 説明 (3)
- Linux (17)
- LAN (4)
- MFC VC6.0 (8)
- データベース (29)
- 古の道具 Emacs (14)
- bash (11)
- CGI (7)
- 正規表現 (4)
- レイアウト (4)
- ビンゴ中西のエッセイ (6)
- Apache (5)
- CSS (1)
- FC2 BLOG解析 (13)
- メンズカジュアル (12)
- JavaScript (36)
- ネットワーク (4)
- それ仕様書でできるよ (7)
- 料理 (6)
- 超高速vi (17)
- Java (38)
カレンダー
日 | 月 | 火 | 水 | 木 | 金 | 土 |
---|---|---|---|---|---|---|
- | - | - | - | 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 | - |
月別アーカイブ
- 2009年03月 (1)
- 2009年02月 (12)
- 2009年01月 (9)
- 2008年12月 (4)
- 2008年11月 (14)
- 2008年10月 (38)
- 2008年09月 (12)
- 2008年08月 (4)
- 2008年07月 (26)
- 2008年06月 (16)
- 2008年05月 (5)
- 2008年03月 (1)
- 2008年02月 (2)
- 2008年01月 (2)
- 2007年12月 (5)
- 2007年11月 (18)
- 2007年10月 (22)
- 2007年09月 (39)
- 2007年08月 (20)
- 2007年07月 (98)
- 2007年06月 (64)
- 2007年05月 (68)
- 2007年04月 (11)
- 2007年03月 (72)
- 2007年02月 (51)
- 2007年01月 (59)
- 2006年12月 (58)
- 2006年11月 (29)
- 2006年10月 (26)
- 2006年09月 (16)
- 2006年08月 (14)
- 2006年07月 (17)
- 2006年06月 (13)
- 2006年05月 (21)
- 2006年04月 (16)
- 2006年03月 (22)
- 2006年02月 (29)
| ホーム |
[,]