[[How2Computing]]

-関連トピックス
//--[[Mac OS X の Xcodeでライブラリを作る:http://is.ocha.ac.jp/~siio/index.php?How2dylib]]
--[[Windwos Visual Studio 2010 のC++で動的ライブラリ dll を作る:http://is.ocha.ac.jp/~siio/index.php?How2dll]]
--[[Windwos Visual Studio 2010 で静的ライブラリ lib を作る:http://is.ocha.ac.jp/~siio/index.php?How2lib]]
--[[ccで作ったライブラリ(dylib)をJava (JNA) から使う(Mac OS X 編)::http://is.ocha.ac.jp/~siio/index.php?How2lib]]


*Mac OS X の Xcodeで動的ライブラリ dylib を作る [#xfb23b69]

** Xcode 5 at Mavericks の場合 [#wf1975a6]

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

http://is.ocha.ac.jp/~siio/gyazo/20140614113602.png

http://is.ocha.ac.jp/~siio/gyazo/20140614114206.png



** Xcode 3 の場合 [#t2fe904b]

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

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


** Xcode で dylib を作る [#rf885dbe]

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を使ってみる [#ma117ab9]

ここで作った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

のような結果が得られる


**他の言語からの利用 [#x0a1979e]

以下のサイトによると、
こうして作った動的ライブラリは、REALbasicからも利用できるようです。
-[[Xcodeでのdylib作成と、REALbasicからの利用:http://blog.macfeeling.com/realbasic/xcodedylibrealbasic]]


*Mac OS X の Xcodeで静的ライブラリ a を作る [#oc509903]

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