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

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

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

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

ダイナミックライブラリは、Windowsだとdll、Linuxだとsoという拡張子になると思いますが、OSXだとdylibがそれにあたるようです。

下記ブログを参考に、試しに作ってみます。

mac の gcc で dylib を作成する方法

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

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

$ cd dylibexample/
$ vim dylibexample.c

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

#include <stdio.h>
 
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を作ったり使ったりする方法。

About katty0324

Scroll To Top