Mac OSXでダイナミックライブラリdylibを作ったり使ったりする方法。

スクリーンショット 2013-10-22 22.12.50

最近、Javaからダイナミックライブラリの呼び出しをしようと考えていますが、「そもそもダイナミックライブラリってどうやって作るんでしょう?」ということで調べました。

OSXのダイナミックライブラリは、dylib

ダイナミックライブラリは、Windowsだとdll、Linuxだとsoという拡張子になると思いますが、OSXだとdylibがそれにあたるようです。
下記ブログを参考に、試しに作ってみます。
mac の gcc で dylib を作成する方法

ライブラリのコードを書く。

早速、ライブラリのコードを書きます。

$ cd dylibexample/
$ vim dylibexample.c

簡単なライブラリコードを書きます。hello関数を実行すると、hello worldを出力するだけです。

#include 
int hello() {
	printf("hello world\n");
	return 0;
}

これをdylib形式のライブラリにしていきます。

gccでdylibにコンパイルする。

OSXの場合は、-dynamiclibオプションをつけてコンパイルすると、dylibファイルが作成できます。

$ gcc -dynamiclib -o libdylibexample.dylib dylibexample.c
$ ls
dylibexample.c		libdylibexample.dylib

意外と簡単にライブラリになってしまいました。

main関数からライブラリを使う。

今度はライブラリを使う側の本体の処理を書きます。

$ vim main.c

メイン関数の中に、ライブラリのhello関数を呼ぶ処理を書くだけとします。

int main(){
	return hello();
}

これをコンパイルするときに、dylibをリンクします。

$ gcc -o main main.c -lm libdylibexample.dylib
$ ls
dylibexample.c		libdylibexample.dylib	main			main.c

実行します。

$ ./main
hello world

メイン関数から、dylibのhello関数が呼び出され、hello worldが表示されました!
最近は、このくらいの低いレイヤーのプログラムを書くことがなかったので、内容にいまいち自信ないです。

各プラットフォームの動的ライブラリを作るシリーズ

Linuxの場合: Linuxで共有ライブラリsoを作ったり使ったりする方法。
Windowsの場合: Windowsでダイナミックリンクライブラリdllを作ったり使ったりする方法。
Visual Studioの場合: Visual Studioでダイナミックリンクライブラリdllを作ったり使ったりする方法。

コメント

  1. […] Mac OSXでダイナミックライブラリdylibを作ったり使ったりする方法。 […]

  2. […] Mac OSXでダイナミックライブラリdylibを作ったり使ったりする方法。 Linuxで共有ライブラリsoを作ったり使ったりする方法。 […]

  3. […] Mac OSXの場合: Mac OSXでダイナミックライブラリdylibを作ったり使ったりする方法。 Linuxの場合: Linuxで共有ライブラリsoを作ったり使ったりする方法。 Windowsの場合: Windowsでダイナミックリ […]

  4. […] Mac OSXでダイナミックライブラリdylibを作ったり使ったりする方法。 Linuxで共有ライブラリsoを作ったり使ったりする方法。 Windowsでダイナミックリンクライブラリdllを作ったり使ったりす […]

タイトルとURLをコピーしました