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

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

Barbara Streisand
Barbara Streisand原创
2024-11-08 04:21:01519浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn