2016-02-18 10 views
8

私たちは共通のコードを単一の動的フレームワークに移行しました。これまでのところ64ビットデバイス上で罰金を実行しているが、次のように32ビットデバイス上でクラッシュを持つ:Xcode 7.2ダイナミックフレームワーク32ビットデバイスエラー

dyld: REBASE_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB has segment 0 which is not a writable segment (__TEXT) in 
/path/to/MyApp.app/Frameworks/MyFramework.framework/MyFramework 

少し背景:を私たちはARM64ARMv7x86_64アーキテクチャに対してコンパイルffmpegのといくつかの他の脂肪LIBSをしましたフレームワークに追加されました。リンカーフラグに-read_only_relocs suppressを追加することで解決されたテキスト再配置エラーがありました。

ffmpegと関連するライブラリを取り除くと、32ビットデバイスで正常に動作します。

誰もこのようなエラーに遭遇しましたか?任意のポインタやヘルプは非常に高く評価されます。

答えて

0

フレームワーク内のMach-Oタイプに「ダイナミックライブラリ」を使用した場合、同じ問題が発生しました。 「リロケータブルオブジェクトファイル」に切り替えると、問題が解決されました。この問題は、図書館内でのテキストの移転にあるようです。詳細hereに記載されるように

: 「テキストの再配置は、絶対アドレッシングモードを使用して、実行時に可変アドレスを持つオブジェクトへの参照の結果である命令エンコーディング自体がアドレスしたがっての実行可能なテキストを含みます。実行時の実際のロードアドレスを考慮に入れて、正しいアドレスを格納するようにバイナリを変更する必要があります。

FFMPEGの使用テキスト再配置し、それらがいつでもすぐに修正されるつもりはないされているので、それは、Android M(https://trac.ffmpeg.org/ticket/4928

上の大きな課題となっている、「再配置可能なオブジェクト・ファイルは、」唯一の選択肢であると思われます。

関連する問題