ffmpeg源码编译成功,但是引用生成的静态库(.a)报错,报错位置在xxx_list.c,报错信息为某变量未定义

这篇具有很好参考价值的文章主要介绍了ffmpeg源码编译成功,但是引用生成的静态库(.a)报错,报错位置在xxx_list.c,报错信息为某变量未定义。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        背景:本文是对上一个文章的补充,在源码编译之前,项目是有完整的ffmpeg编译脚本的,只不过新增了断点调试ffmpeg,所以产生的上面的文章,也就是说,我在用make编译成功后,再去做的源码编译。后来我修改了脚本,然后源码编译成功,但是引用的时候报错了。报错位置在各种xxx_list.c(后面简写为list.c)里面的变量找不到,undefined symbol :_ff_aac_parser 之类的。

         针对上面的报错,其实就是你没编译相关的.c文件,导致.a中缺少对应的代码,引用的时候就报错了,有三种解决方式,

        一、直接在list.c里面找到对应的变量,例如undefined symbol :_ff_aac_parser报错,就将&ff_aac_parser注释掉。需要注意的是,你的工程中(引用静态库的工程)也没用这个类才行。

        二、将定义ff_aac_parser的.c文件找到,然后添加到编译列表里。如果你没用到这个.c文件,添加之后就只会增加工程大小。不建议这么操作

        三、重新make,然后生成新的符合配置的list.c文件。强烈建议该方法。下面细说

        针对第三种解决方案,首先说明list.c是哪来的。该文件实际上是你在执行编译脚本或者执行configure成功之后生成的配置文件。都知道configure会根据你提供的参数,生成专属于你的config.h文件, 但实际上,除了config.h以外,还会在你的源码目录里生成其他配置文件,例如avformat,会生成allformat.c和好几个xxx_list.c文件(见下图)。你如果看过makefile就能知道,这些生成的.c文件是会编译进去的。当你的configure参数发生改变时,这些生成的.c也会发生变化。因此也需要修改。

        通常情况下,你如果不新增参数prefix(修改输出目录的)情况下,是默认输出在源码路径的,会自动替换掉这些.c文件。不需要操心。但是我们需要源码编译的情况下,修改了输出目录,会导致ffmpeg源码的这些.c文件没有被替换掉。还是旧的,这就导致了上面的报错。因此需要手动替换掉,就是将生成的所有list.c文件更新到你ffmpeg源码工程里一下,allformat.c这个可以不更新,每次都是一样的。

        如果你在编译源码的时候,并没有执行过configure,那么你需要执行一次,编译成功后才会有这些.c文件,ffmpeg的git库中是没有追踪这些文件的,也就是你无法从git库里下载到。对于configure的执行,网上很多,我就不做介绍了。有问题直接百度吧。

ffmpeg源码编译成功,但是引用生成的静态库(.a)报错,报错位置在xxx_list.c,报错信息为某变量未定义,ffmpeg,源码编译,报错,iOS,objective-c,c语言

文件内容根据工程配置的不同而不同,此图仅做样例展示

ffmpeg源码编译成功,但是引用生成的静态库(.a)报错,报错位置在xxx_list.c,报错信息为某变量未定义,ffmpeg,源码编译,报错,iOS,objective-c,c语言文章来源地址https://www.toymoban.com/news/detail-636046.html

到了这里,关于ffmpeg源码编译成功,但是引用生成的静态库(.a)报错,报错位置在xxx_list.c,报错信息为某变量未定义的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 51单片机编译没有报错,但是下载后程序不更新

    51单片机程序修改后,编译没有报错,但是下载到芯片后,程序好像没有更新,新添加的代码没有运行。 删除编译过程生成的所有中间文件 重新编译,此时应该会有报错 然后检查新添加的代码是否有指针用错的问题

    2024年01月24日
    浏览(42)
  • [FFmpeg] 源码编译

    git clone https://git.ffmpeg.org/ffmpeg.git git checkout -b 5.1 remotes/origin/release/5.1 ./configure --prefix=./OUT --enable-shared --disable-static make make install 默认安装路径见: /usr/local/bin /usr/local/include /usr/local/lib /usr/local/main/man1 /usr/local/main/man3 有 --prefix 参数的安装路径: [prefix]/bin [prefix]/include [prefix

    2024年02月10日
    浏览(37)
  • Visual Studio2012编译成功却报错

    使用Visual Studio2012编写windows窗体应用点击运行后编译成功却报错 使用Visual Studio2012编写windows窗体应用点击运行后编译成功却报错:尝试运行项目时出错: Uncaught exception thrown by method calledthrough Reflection.但是如果是ctrl+F5则可以正常运行。错误提示如下: 1.在安装vs时缺少有关配置

    2024年02月05日
    浏览(65)
  • 源码编译FFmpeg4.3

    FreeSWITCH的mod_av模块目前(1.10.11)暂不支持FFmpeg4.4(或者更高版本),但4.3就没问题 最近试了试源码编译FFmpeg4.3,记录如下(系统centos7.9): git clone GitHub - BtbN/FFmpeg-Builds 找到4.4.sh,改成这样: GIT_BRANCH=\\\"release/4.3\\\" ./build.sh linux64 gpl 4.4 cd ffbuild/ffmpeg ./configure --enable-shared make

    2024年02月01日
    浏览(39)
  • 【FFmpeg】在 Mac OS 中编译 FFmpeg 源码 ① ( homebrew 安装 | 通过 gitee 源安装 homebrew | 安装 FFmpeg 编译所需的软件包 )

    在 Mac 系统中 homebrew 是一款 软件包管理工具 , 可以 轻松的 安装 / 卸载 / 更新 / 查看 / 搜索 软件包 , 可以简单方便地对软件包进行管理 , 无需用户 处理 复杂的依赖关系 问题 ; homebrew 是 基于 Git 的仓库 的 , 用户 跟踪 和 获取最新版本的软件包 ; homebrew 的 默认安装位置是 /u

    2024年04月13日
    浏览(60)
  • windows下msys2编译64位的ffmpeg源码

    目前遇到过两次需求,需要编译ffmpeg源码。网上下载的编译好的源码里面可能不全,很多时候需要自行编译源码。本文介绍自行编译ffmpeg64位源码(32位通过相似的方式为编译成功,不知道原因) 环境: 2023.5.4下载的最新版msys2 ffmpeg 4.3.2源码 windows操作系统 首先需要msys2软件和

    2024年02月03日
    浏览(41)
  • RT-Thread开发,使用SCons编译,生成静态库,并进行链接生成MCU程序

            SCons 是一个开放源代码、以 Python 语言编写的下一代的程序建造工具。它最初的名字是 ScCons, 基于由 perl 语言编写的 Cons 软件开发而成,它在 2000 年 8 月获得了由 Software Carpentry 举办的 SC 建造比赛的大奖。现在 ScCons 已经被改名为 SCons,目的是为了表示不再与 Sof

    2024年02月11日
    浏览(44)
  • Ubuntu 22.04 x86_64 源码编译 pytorch-v2.0.1 笔记【2】编译成功

     20230831继续: 当前状态 故障1 目录是空的 (pytorch-build) yeqiang@yeqiang-MS-7B23:~/Downloads/src/pytorch$ ll third_party/foxi 总计 0   手动checkout (pytorch-build) yeqiang@yeqiang-MS-7B23:~/Downloads/src/pytorch/third_party/foxi$ git pull 已经是最新的。 (pytorch-build) yeqiang@yeqiang-MS-7B23:~/Downloads/src/pytorch/third_party/fo

    2024年02月10日
    浏览(55)
  • C++编译静态成员函数报错: “osgGA::DriveManipulator::setEye”: 非静态成员函数的非法调用

    来看代码 但是会报错,说引用错误。 这是因为把computePosition函数定义为 static 引起的。 解决办法: computePosition函数定义为 static 不能更改了(我的代码需求,static必须存在),所以要在它内部使用,需要把其它函数也改成静态的。 更改如下: 关于.cpp文件那两行应该放在哪

    2024年02月09日
    浏览(50)
  • Xcode protobuf2.5添加arm64编译器补丁生成静态库

    项目需求,protobuf源码编成静态库使用 但是,github上的protobuf源码没有对应arm64的编译器定义,编译出来的静态库使用时报错。 下面的连接是arm64编译器代码补丁包,把编译器代码放到src/google/protobuf/stubs/atomicops_internals_arm64_gcc.h 然后src/google/protobuf/stubs/atomicops.h的宏定义部分加

    2024年02月14日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包