Apple のポリシーはそのままにして、Objective-C 言語だけについて話します。私のプログラムが.a
ライブラリを呼び出しているとします。.a
これは、インターネットからgrep し、古いバージョンでは.a
なく新しいバージョンを実行することは可能.a
ですか?
ありがとう。
Apple のポリシーはそのままにして、Objective-C 言語だけについて話します。私のプログラムが.a
ライブラリを呼び出しているとします。.a
これは、インターネットからgrep し、古いバージョンでは.a
なく新しいバージョンを実行することは可能.a
ですか?
ありがとう。
静的にリンクされたライブラリ ( .a
) ではなく、少なくとも健全なレベルでは。動的にロードされたライブラリ ( .so
) を使用すると、確かにそれを行うことができます。これは通常の使用例の 1 つです。を見て、dlopen
動的ローダーから (https://developer.apple.com/library/mac/#documentation/DeveloperTools/Reference/MachOReference/Reference/reference.html)。dlclose
dlsym
これは iOS だけでなく、OS X アプリ (およびおそらく他の Unix 全体) にも当てはまります。
静的ライブラリ (.a ファイル) は、アプリケーション バイナリの一部であるため、プログラムの実行中に置き換えることはできません。アプリケーション バイナリは、プロセスのアドレス空間にマップされます。その一部を変更しようとすると、ほぼ確実にアプリがクラッシュします。
動的ライブラリ (.so ファイル) は、理論上は置き換え可能です。ただし、ほとんどのアプリケーションでは、最初に、または最初に必要になったときに一度ロードすると、アプリケーションのアドレス空間の一部になります。アプリケーションが動的ライブラリをアンロードすることは理論的に可能であると聞いたことがありますが、実際の Cooca アプリケーションでそれが行われるのを見たことはありません。