首页 > 后端开发 > C++ > 为什么使用 ffmpeg 编译时出现重定位错误以及如何修复它?

为什么使用 ffmpeg 编译时出现重定位错误以及如何修复它?

Barbara Streisand
发布: 2024-11-08 04:21:01
原创
486 人浏览过

Why do I get a relocation error when compiling with ffmpeg and how can I fix it?

使用 -fPIC 重新编译以实现共享库兼容性

使用库编译程序时,确保库类型和编译之间的兼容性至关重要旗帜。使用 ARM Ubuntu 机器重新安装 ffmpeg 时会出现这样一种情况。编译使用 ffmpeg 库的程序可能会导致以下错误:

/usr/bin/ld: /usr/local/lib/libavcodec.a(amrnbdec.o): relocation R_ARM_MOVW_ABS_NC against `a local symbol' can not be used when making a shared object; recompile with -fPIC
/usr/local/lib/libavcodec.a: could not read symbols: Bad value
collect2: ld returned 1 exit status
登录后复制

此错误表示库类型和编译标志之间不匹配。 -fPIC 标志通常在编译将包含在共享库 (.so) 中的代码时使用。然而,默认情况下,ffmpeg 通常被编译为静态库 (.a)。

要解决此问题,您必须使用 -fPIC 标志重新编译 ffmpeg。这可以通过配置ffmpeg时修改编译选项来完成。为此,请将“--enable-shared”添加到 ./configure 选项中。或者,您可以通过添加“--disable-shared”来完全禁用共享库。

进行此更改后,重新编译 ffmpeg 将生成共享库(.so)而不是静态库(.a) )。当您编译使用 ffmpeg 库的程序时,它将能够成功链接到共享库,解决重定位错误。

以上是为什么使用 ffmpeg 编译时出现重定位错误以及如何修复它?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板