質問: ### 実現したいこと ios で ライブラリ test.a を動的リンクしたい。 (test.a を使う時にメモリーに乗るようにしたい) ### 発生している問題 test.a を Optional でリンクしました。 メモリー使用量(Debug gaugesで計測)が下記のようになりました。 1. test.a リンク無し,起動直後 2.6Mbyte 2. test.a リンク有り,ライブラリの関数コールのコード無し,起動直後 2.6Mbyte 3. test.a リンク有り,ライブラリの関数コールのコード有り,起動直後 3.3Mbyte 4. test.a ライブラリを関数をコール直後 3.4Mbyte このように、3. が 2. より 0.7Mbyte 増えていて、 test.a は起動時にロードされていて、 関数コール時に test.a をロードしていないような動作になりました。 この挙動は、ios は動的リンクはできないということなのでしょうか? 又は、他に試してみる事があれば指摘していただけると助かります。 よろしくお願いいたします。
回答: そもそも「.a」ファイルは、動的ライブラリではなく、静的ライブラリだと思います。 動的ライブラリなら「.dylib」の拡張子がつくはずです。 で、iOSで動的ライブラリが使えるかどうかについては が参考になると思います。どうもiOS7までは静的ライブラリしか使えませんでしたが、iOS8から動的ライブラリを使えるようになったようです。 ただ、あなたが期待しているのは関数呼び出し前にライブラリをロードして呼び出し後にアンロードされることだと思いますが、それを期待するなら自分でdlopen()/dlsym()/dlclose()を使って手動でライブラリをロード/シンボル解決/アンロードする必要があると思います。単純に動的ライブラリの関数呼び出しを書いただけだと、プロセス起動時に必要な動的ライブラリを自動ロードし、プロセス停止までロードしたまま動作すると思います。ライブラリロード処理やシンボル解決処理はコストのかかる処理ですから。