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