3

xcode4でffmpegのlibav*ライブラリを使用する単純なアプリケーションを構築しようとしていますが、次のエラーが発生します。

ld:アーキテクチャi386の_ff_ac3_bit_alloc_calc_psdの/ffmpeg/temp/ffmpeg-0.8/builduni/lib/libavcodec.a(ac3.o)からnon_lazy_ptrへの不正なテキストの再配置

この問題を修正するためにranlib-clibavcodec.aを実行しようとしましたが、何も起こりませんでした。もう1つ、私のlibav *ライブラリはファットバイナリ(i386 + x86_64)です。

何かアイデアはありますか?

4

1 に答える 1

4

同じエラーがあります。最後に、 http://lists.apple.com/archives/unix-porting/2008/Jan/msg00027.htmlで解決策を見つけました。

他のリンクフラグを追加するだけです:

-read_only_relocs suppress

* 説明 * 2 つのアセンブリ コマンドは、_trail の絶対アドレスを R15 にロードします。_trail が最終的に同じリンケージ ユニット内にある場合は、これで問題ありません。_trail は libmodule.dylib にあります。これが機能するには、実行時にダイナミック ローダー (dyld) が 2 つの命令を書き換える必要があります。通常、dyld はデータ ポインターのみを更新します。回避策の 1 つは、libdyalog をアーカイブ (例: libdyalog.a) にして、それを pere.s にリンクすることです。その場合、すべてのコードが同じリンケージ ユニットにあるため、ランタイム テキストの再配置は必要ありません。ランタイム (dyld) は i386 のテキスト再配置 (命令の更新) をサポートしていますが、-read_only_relocs 抑制とリンクする必要があります。

于 2012-02-17T03:27:11.603 に答える