zoukankan      html  css  js  c++  java
  • 问题解决:FFmpeg视频编解码库,无法解析的外部信号

    在编译FFmpeg相关项目时。可能会出现:

    error LNK2019: 无法解析的外部符号 "int __cdecl avpicture_fill(struct AVPicture *,unsigned char const *,enum AVPixelFormat,int,int)" (?avpicture_fill@@YAHPAUAVPicture@@PBEW4AVPixelFormat@@HH@Z),该符号在函数 "bool __cdecl YV12ToBGR24_FFmpeg(unsigned char *,unsigned char *,int,int)" (?YV12ToBGR24_FFmpeg@@YA_NPAE0HH@Z) 中被引用
    
    error LNK2019: 无法解析的外部符号 "void __cdecl sws_freeContext(struct SwsContext *)" (?sws_freeContext@@YAXPAUSwsContext@@@Z),该符号在函数 "bool __cdecl YV12ToBGR24_FFmpeg(unsigned char *,unsigned char *,int,int)" (?YV12ToBGR24_FFmpeg@@YA_NPAE0HH@Z) 中被引用

    这样的相似情况,在检查包括文件夹、库文件夹、链接器输入和系统环境变量均设置无误的情况下,包括的文件要写成下面形式:

    extern "C"
    {
        #include <libavcodecavcodec.h>
        #include <libavformatavformat.h>
        #include <libswscaleswscale.h>
        #include <libavutilpixfmt.h>
        #include <libavutilimgutils.h>
    };

    这样的情况是由于,头文件里的函数定义在编译为 C 程序的文件里。而头文件是在 C++ 文件里不带 extern “C” 修饰符声明的。

    在此情况下,须要加入extern "C"修饰符。

    相似的,定义在编译为 C 程序的文件里的符号, 若要在C++ 文件里进行声明,不可使用:

    extern int i; 
    extern void g(); 

    而应该使用:

    extern "C" int i; 
    extern "C" void g(); 

    具体的解释:http://www.cnblogs.com/rollenholt/archive/2012/03/20/2409046.html

  • 相关阅读:
    java操作练习
    java认知
    java了解
    抽象类及抽象类
    杨辉三角实例菱形实例
    案例分析之运行顺序
    Object类的方法,toString的重写.
    多态
    类的继承
    面对对象
  • 原文地址:https://www.cnblogs.com/zhchoutai/p/8583278.html
Copyright © 2011-2022 走看看