使用libav *库在xcode 4中构建时,非法文本重定向到non_lazy_ptr错误

时间:2011-07-11 12:37:48

标签: xcode4 ffmpeg linker-errors libav non-lazy-ptr

我正在尝试构建一个在xcode 4中使用ffmpeg的libav *库并获得以下错误的简单应用程序:

ld:非法文本从/ffmpeg/temp/ffmpeg-0.8/builduni/lib/libavcodec.a(ac3.o)中的non_lazy_ptr重新定位到_ff_ac3_bit_alloc_calc_psd中的架构i386

我已经尝试运行ranlib -c libavcodec.a来解决这个问题,但没有任何事情发生。 还有一件事:我的libav *库是胖二进制文件(i386 + x86_64)。

任何想法可能是什么?

1 个答案:

答案 0 :(得分:4)

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

只需添加其他链接标记:

-read_only_relocs suppress
  

* EXPLANATION * 两个汇编命令将_trail的绝对地址加载到R15中。如果最终_trail,那么这样做很好   在同一个联动单位。 _trail位于libmodule.dylib中。为了这个   工作,在运行时动态加载器(dyld)将不得不重写   两条指令。通常dyld只更新数据指针。一项工作   周围是使libdyalog成为一个档案(例如libdyalog.a)和链接   与pere.s.然后所有代码都在同一个链接单元中,   所以不需要运行时文本重定位。运行时(dyld)   确实支持i386的文本重定位(更新说明),但是你   需要链接-read_only_relocs suppress。