使用 libav* 库在 xcode 4 中构建时出现非法文本重新定位到 non_lazy_ptr 错误

发布于 2024-11-19 08:04:20 字数 327 浏览 5 评论 0原文

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

ld: invalid text reloc to non_lazy_ptr from /ffmpeg/temp/ffmpeg-0.8/builduni/lib/libavcodec.a(ac3 .o) 在 _ff_ac3_bit_alloc_calc_psd 中用于架构 i386

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

有什么想法吗?

I'm trying to build a simple application that uses ffmpeg's libav* libraries in xcode 4 and getting the following error:

ld: illegal text reloc to non_lazy_ptr from /ffmpeg/temp/ffmpeg-0.8/builduni/lib/libavcodec.a(ac3.o) in _ff_ac3_bit_alloc_calc_psd for architecture i386

I've already tried to run ranlib -c libavcodec.a to fix this problem, but nothing happend.
One more thing: my libav* libraries are fat binaries (i386 + x86_64).

Any ideas what can it be?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

静水深流 2024-11-26 08:04:20

我有同样的错误。最后,我得到了解决方案
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)并链接
与佩雷的事。那么所有代码​​都将位于同一个链接单元中,
因此不需要运行时文本重新定位。运行时 (dyld)
确实支持 i386 的文本重新定位(更新指令),但是您
需要与 -read_only_relocs 抑制链接。

I have the same error. Finally, I got the solution at
http://lists.apple.com/archives/unix-porting/2008/Jan/msg00027.html

just add other link flag:

-read_only_relocs suppress

* EXPLANATION * The two assembly commands load the absolutes address of _trail into R15. Doing so is fine if _trail is ultimately
in the same linkage unit. _trail is in libmodule.dylib. For this to
work, at runtime the dynamic loader (dyld) would have to rewrite the
two instructions. Normally dyld only updates data pointers. One work
around is to make libdyalog an archive (e.g. libdyalog.a) and link
that with pere.s. Then all the code would be in the same linkage unit,
so there would be no need for runtime text relocs. The runtime (dyld)
does support text relocs (updating instructions) for i386, but you
need to link with -read_only_relocs suppress.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文