0

Apple のポリシーはそのままにして、Objective-C 言語だけについて話します。私のプログラムが.aライブラリを呼び出しているとします。.aこれは、インターネットからgrep し、古いバージョンでは.aなく新しいバージョンを実行することは可能.aですか?

ありがとう。

4

2 に答える 2

2

静的にリンクされたライブラリ ( .a) ではなく、少なくとも健全なレベルでは。動的にロードされたライブラリ ( .so) を使用すると、確かにそれを行うことができます。これは通常の使用例の 1 つです。を見て、dlopen動的ローダーから (https://developer.apple.com/library/mac/#documentation/DeveloperTools/Reference/MachOReference/Reference/reference.html)。dlclosedlsym

于 2012-04-20T14:02:50.557 に答える
0

これは iOS だけでなく、OS X アプリ (およびおそらく他の Unix 全体) にも当てはまります。

静的ライブラリ (.a ファイル) は、アプリケーション バイナリの一部であるため、プログラムの実行中に置き換えることはできません。アプリケーション バイナリは、プロセスのアドレス空間にマップされます。その一部を変更しようとすると、ほぼ確実にアプリがクラッシュします。

動的ライブラリ (.so ファイル) は、理論上は置き換え可能です。ただし、ほとんどのアプリケーションでは、最初に、または最初に必要になったときに一度ロードすると、アプリケーションのアドレス空間の一部になります。アプリケーションが動的ライブラリをアンロードすることは理論的に可能であると聞いたことがありますが、実際の Cooca アプリケーションでそれが行われるのを見たことはありません。

于 2012-04-20T14:42:42.370 に答える