我是靠谱客的博主 清秀裙子,最近开发中收集的这篇文章主要介绍问题解决: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

转载于:https://www.cnblogs.com/zhchoutai/p/8583278.html

最后

以上就是清秀裙子为你收集整理的问题解决:FFmpeg视频编解码库,无法解析的外部信号的全部内容,希望文章能够帮你解决问题解决:FFmpeg视频编解码库,无法解析的外部信号所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(60)

评论列表共有 0 条评论

立即
投稿
返回
顶部