首页 > 后端开发 > C++ > 正文

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

Barbara Streisand
发布: 2024-11-08 07:00:02
原创
721 人浏览过

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!