首页 >后端开发 >C++ >为什么我会收到错误'创建共享对象时不能使用针对'本地符号'的重定位 R_ARM_MOVW_ABS_NC”?

为什么我会收到错误'创建共享对象时不能使用针对'本地符号'的重定位 R_ARM_MOVW_ABS_NC”?

Barbara Streisand
Barbara Streisand原创
2024-11-08 07:00:02800浏览

Why do I get the error

在 ARM Ubuntu 机器上使用 -fPIC 标志重新编译

在 ARM Ubuntu 机器上重建 FFmpeg 时,可能会遇到错误:

relocation R_ARM_MOVW_ABS_NC against `a local symbol' can not be used when making a shared object; recompile with -fPIC

此错误表明系统正在尝试将静态库与动态库链接库,这是不兼容的。要解决此问题,需要使用 -fPIC 标志重新编译有问题的库,例如 FFmpeg。

重新编译过程

可以采取以下步骤使用 -fPIC 标志重新编译库:

  1. 编辑库的源代码: 找到并打开导致重定位错误的库的源代码文件。
  2. 添加 -fPIC 标志: 将 -fPIC 标志添加到编译器源代码中指定的选项。此标志指示编译器生成位置无关代码 (PIC),适合动态链接。
  3. 重新编译库: 使用更新的编译器选项重新构建库。这通常可以使用 make 命令来完成。
  4. 安装重新编译的库:使用 PIC 重新编译库后,应将其安装到系统的库目录中。这将使它可以与其他程序链接。

FFmpeg 的具体示例

对于 FFmpeg,可以使用以下命令重新编译它: -fPIC 标志:

./configure --enable-shared --disable-static
make

通过添加 --enable-shared 标志,共享库将生成而不是静态的。 --disable-static 标志确保不构建静态库。

使用这些选项重建 FFmpeg 后,可以使用 make install 将重新编译的库安装到适当的系统目录中。这将使启用 PIC 的 FFmpeg 库可供其他程序链接和使用。

以上是为什么我会收到错误'创建共享对象时不能使用针对'本地符号'的重定位 R_ARM_MOVW_ABS_NC”?的详细内容。更多信息请关注PHP中文网其他相关文章!

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