3

我正在尝试构建一个简单的应用程序,该应用程序在 xcode 4 中使用 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 -c libavcodec.a 来解决这个问题,但没有任何反应。还有一件事:我的 libav* 库是胖二进制文件 (i386 + x86_64)。

有什么想法吗?

4

1 回答 1

4

我有同样的错误。最后,我在 http://lists.apple.com/archives/unix-porting/2008/Jan/msg00027.html得到了解决方案

只需添加其他链接标志:

-read_only_relocs suppress

* 解释 *这两个汇编命令将 _trail 的绝对地址加载到 R15 中。如果 _trail 最终在同一个链接单元中,这样做很好。_trail 在 libmodule.dylib 中。为此,在运行时动态加载器 (dyld) 必须重写这两条指令。通常 dyld 只更新数据指针。一种解决方法是使 libdyalog 成为存档(例如 libdyalog.a)并将其与 pere.s 链接。然后所有代码都在同一个链接单元中,因此不需要运行时文本重定位。运行时(dyld)确实支持 i386 的文本重定位(更新指令),但您需要与 -read_only_relocs 抑制链接。

于 2012-02-17T03:27:11.603 回答