2

位置に依存しない必要がある iPhone アプリケーションを作成しています。ソースコードを持っていないサードパーティのライブラリにリンクしています。

  1. そのようなライブラリが -fPIC でコンパイルされておらず、したがって位置に依存しない場合でも、それに対してリンクして有効な PIE バイナリを生成できますか?

  2. ダイナミック ローダーは、このライブラリのコードが原因で発生するテキストの再配置を処理しますか。

  3. そうでない場合、この状況を解決して PIE バイナリを生成するためのオプションは何ですか?

4

1 に答える 1

0

私が知る-fPIC限り、オブジェクト ファイルから動的ライブラリを作成する予定がない限り、ソース ファイルがビルドされたかどうかは重要ではありません。実際、ほとんどの静的ライブラリは、位置に依存しない方法で構築されていません。これが禁止されるというわけではありませんが、後でバイナリが少し大きくなり、遅くなります (コンパイラ/リンカーが特定の種類の最適化を実行できないため)。

また、バイナリは独自のアドレス空間で実行され、位置に依存する必要はまったくありません。これが、動的ライブラリが異なるメモリ位置を必要とする異なるバイナリ間で共有されるため、位置に依存しない必要がある理由です。そのため、動的リンカーは、実行時にバイナリのプロセス空間内の別の場所にライブラリを移動できる必要があります。

もっと簡単に言えば、その静的ライブラリにリンクするだけで、すべてがうまくいきます。

于 2014-01-09T18:44:48.383 に答える