FFmpeg 静态库编译错误汇总

今天使用静态库编译发现 了错误 这个只有在arm64 的编译上 存在 。armeabi-v7a不存在问题

ld: error: relocation R_AARCH64_ADD_ABS_LO12_NC cannot be used against symbol 'ff_cos_16384'; recompile with -fPIC

解决方案列举汇总  有很多 大家如果有同样的问题可以一一测试。我这里只说明我的情况不一定适合每一个人

  1.  --extra-cflags="-Os -fPIC.  经过测试无效
     
  2. 修改config.mak 中   经过测试无效。 如果你细心这个文件每次执行脚本都会覆盖重新生成。所以你提前修改 执行以后还是恢复原状。除非你先执行 configure ,修改编辑后再 进行make 。但我测试还是没用
    -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
    改为 
    -D_FILE_OFFSET_BITS=64 -fPIC -D_LARGEFILE_SOURCE
  3. 增加 --extra-cflags=  no-pie 。 也无用 

  4. FFmpeg 脚本增加 --enable-pic   。 无用

  5. 脚本增加 --disable-asm   有效 

    是用来禁用汇编优化的选项。在编译过程中,
    当使用汇编优化时,生成的代码可能会包含一些特定的汇编指令,
    这些指令可能与代码的位置无关(Position-Independent Code,PIC),
    而这会导致一些链接问题。
    由于你使用了 --disable-asm,禁用了汇编优化,
    所以不会生成那些特定的汇编指令,避免了与位置无关代码相关的链接问题,
    从而解决了这个错误。


     

输入格式(Input Formats)和解码器(Decoders)在FFmpeg中具有不同的功能和作用:

  • 输入格式(Input Formats):输入格式处理的是解封装(Demuxing)的功能。它负责从媒体文件中读取音频和视频数据,并提供给解码器进行解码。输入格式的任务是解析文件头、元数据、时间轴等信息,将媒体文件中的音频和视频数据流提取出来,以供后续处理使用。输入格式可以处理各种媒体文件格式(如MP4、AVI、MKV等)和网络流协议(如RTSP、HTTP等)。

  • 解码器(Decoders):解码器负责将编码后的音频和视频数据解码为原始的音频采样和视频帧。它们能够理解不同的音频编码格式(如AAC、MP3、FLAC等)和视频编码格式(如H.264、VP9、MPEG-4等),并将它们解码为可供播放或处理的原始数据。解码器的任务是将压缩的音视频数据还原为未压缩的格式,以便后续的处理、播放或编码操作。

因此,输入格式和解码器在FFmpeg中扮演不同的角色。输入格式处理的是解封装和数据提取的功能,而解码器处理的是将编码数据解码为原始数据的功能。输入格式和解码器通常一起工作,输入格式从媒体文件中提取数据并传递给解码器进行解码,以便后续的处理和使用。

你可能感兴趣的:(NDK,FFMPEG,ffmpeg)