一步一步学习ffmpeg编程:一走进ffmpeg的大门
第一次在windows上编写ffmpeg程序,把遇到的问题记下来
1. 新建了一个win32的应用程序,选择了空项目
写了int main(int argc, char** argv(){}后出现了
error LNK2019: 无法解析的外部符号 _WinMain@16,该符号在函数 ___tmainCRTStartup 中被引用
原因:c语言运行时找不到适当的程序入口函数,一般情况下,如果是windows程序,那么WinMain是入口函数,如果是dos控制台程序,那么main是入口函数,而如果入口函数指定不当,很显然c语言运行时找不到配合函数,它就会报告错误。
解决方案:项目——> 项目属性——> 配置属性——> 链接器——> 系统——> 子系统
选择控制台(SUBSYSTEM:CONSOLE) 则表示此项目是WIN32控制台程序。
选择Windows (/SUBSYSTEM:WINDOWS) 则表示为 WIN32项目。
2. libavutil\common.h(87): fatal error C1004: 发现意外的文件尾
解决方法:加入代码#define __STDC_CONSTANT_MACROS
3. 无法解析的外部符号 "void __cdecl av_log_set_level(int)" (?av_log_set_level@@YAXH@Z),该符号在函数 _main 中被引用
原因:ffmpeg中的程序是C语言写的,如果C++调用需要加上extern "C"
解决方案
extern "C"
{
#include <libavutil/log.h>
};
所有代码
#define __STDC_CONSTANT_MACROS extern "C" { #include <libavutil/log.h> }; #pragma comment(lib,"avutil.lib") int main(int argc, char** argv) { av_log_set_level(AV_LOG_DEBUG); av_log(NULL, AV_LOG_INFO, "一步一步学习ffmpeg!\n"); av_log(NULL, AV_LOG_INFO, "一步一步学习ffmpeg, %s\n", "一起腾飞吧!"); av_log(NULL, AV_LOG_INFO, "一步一步学习ffmpeg, %d!\n", 6666); return 0; }