How2Computing

Mac OS X の Xcodeで動的ライブラリ dylib を作る

Xcode 5 at Mavericks の場合

最初の選択画面がすこし変わっているが、あとは同じ手順。

http://siio.jp/gyazo/20140614113602.png

http://siio.jp/gyazo/20140614114206.png

Xcode 3 の場合

以下の例はOSはSnow Leopard 10.6.6, xcodeは3.2.5です

http://gyazo.com/2c19e1dc7f9761555edd694ad47ce3d1.png

Xcode で dylib を作る

Xcodeのメニュー、「ファイル」「新規プロジェクト...」からBSD C Libraryを選ぶ

http://gyazo.com/f994e6d63062a540779bbcccbc500e60.png

(ここでTypeをStaticにしておくと静的ライブラリが作れるのかもしれない)

プロジェクト名は、ここではとりあえずmydylibにしておく。

Sourceを選択して(中身は空)、「ファイル」「新規ファイル...」からここではC Fileを選ぶ。

http://gyazo.com/8cc13d5d00f188edbb95134960d7b766.png

Cのファイル名は、ここではとりあえずmyfunction.c にしておいた。 ここに、

int myAdd(int a, int b) {
	return a+b;
}

という関数を書いてみる。これをビルドすると、mydylib/build/Debug/libmydylib.dylib というファイルが出来上がる。

必要ならば、「プロジェクト」メニューの、 「アクティブアーキテクチャを設定」からプロセッサを選んだり、 「アクティブなビルド構成を設定」からdebugでなくreleaseを選んだりできる。 また「アクティブなターゲットxxxxを編集」では、インストール先などを指定できる。

出来上がったファイルは、

sudo mv ibmydylib.dylib /usr/local/lib/.

に移動しておく必要がある。

次のコマンドで、出来上がったライブラリを確かめることができる。

$ lipo -info /usr/local/lib/libmydylib.dylib 
Non-fat file: /usr/local/lib/libmydylib.dylib is architecture: x86_64

作ったdylibを使ってみる

ここで作ったlibmydylib.dylibを他のCプログラムから使ってみる。 XcodeでCommand Line Toolのプロジェクトを作る。

http://gyazo.com/27801ab3b4e0b5426424198c54496f87.png

この中で、

int myAdd (int a, int b);

int main (int argc, const char * argv[]) {
    printf("value is %d\n", myAdd(3, 5));
    return 0;
}

というようなプログラムを書く。 また、libmydylib.dylibをドラッグアンドドロップなどして、プロジェクトに追加しておく。 (ここでは簡単にSourceグループに追加した)

http://gyazo.com/4ef158af3f643833a7acd583ff1193cd.png

これを動かすと、

run
[Switching to process 2114]
実行中...
value is 8

のような結果が得られる

他の言語からの利用

以下のサイトによると、 こうして作った動的ライブラリは、REALbasicからも利用できるようです。

Mac OS X の Xcodeで静的ライブラリ a を作る

staticを選択してみる。

http://gyazo.com/1905b415f5b019448728bb7d3c2569e3.png

ここでプロジェクトを、stalibと命名。 プロジェクトにCプログラムを追加して、そこにこんなプログラムを書いてみる。

int staticAdd(int a, int b) {
	return a+b;
}

これをビルドすると、 できあがったライブラリファイルは拡張子が.a。 これも/usr/local/libにコピー。 情報を見ると以下のようになっている。

$ lipo -info /usr/local/lib/libstalib.a 
input file /usr/local/lib/libstalib.a is not a fat file
Non-fat file: /usr/local/lib/libstalib.a is architecture: x86_64

これも同様に、以下のようにして、他のプログラムから利用出来る。

http://gyazo.com/fd9408ab2f740b9fd0aaf751e8e993e7.png


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2014-06-14 (土) 11:42:42 (1253d)