新建的C++工程
error C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> d:\microsoft visual studio 11.0\vc\include\stdio.h(218) : 参见“fopen”的声明
解决:工程属性页|配置属性|C/C++|预处理器|预处理器定义|编辑添加“_CRT_SECURE_NO_WARNINGS”
error C2440: “=”: 无法从“void *”转换为“uint16_t *”
1> 从“void*”到指向非“void”的指针的转换要求显式类型转换
解决:samples = (uint16_t *)av_malloc(buffer_size);
“avcodec_find_encoder”: 不能将参数 1 从“int”转换为“AVCodecID”
1> 转换为枚举类型要求显式转换(static_cast、C 样式转换或函数样式转换)
解决:codec = avcodec_find_encoder((enum AVCodecID)codec_id);
error C2059: 语法错误:“{”
error C2143: 语法错误 : 缺少“;”(在“{”的前面)
error C2143: 语法错误 : 缺少“;”(在“}”的前面)
以上三条指的是c->time_base = (AVRational){1,25};的语法错误,标准C++不支持这种语法。
解决:c->time_base.num = 1; c->time_base.den = 25;
error C3861: “snprintf”: 找不到标识符
解决:snprintf函数并不是标准c/c++中规定的函数,但是在许多编译器中,厂商提供了其实现的版本。
在gcc中,该函数名称就snprintf,而在VC中称为_snprintf。 改成_snprintf就可以了
error C2440: “=”: 无法从“_TCHAR *”转换为“const char *”
1> 与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换
解决:output_type = (const char *)argv[1];
特别注意:这里单字节字符编码(C语言是ASCII)和双字节字符编码不匹配,有以下解决方法
法1:项目属性|配置属性|常规|项目默认值|字符集|使用 Unicode 字符集->使用多字节字符集
法2:可以把 int _tmain(int argc, _TCHAR* argv[]) 改为 C 文件中的 int main(int argc, char **argv),统一为单字节字符编码。
法3:const char *output_type; -> const _TCHAR *output_type;
output_type = argv[1]; -> output_type = (const_TCHAR *)argv[1];
这样就统一都为双字节的。字符串比较函数用wcscmp()替换strcmp(),这样就可以比较宽字符。
解决:下载的64位的库,平台是默认设置Win32,设置成x64就行了。
值得说明的是,
\Windows\System32 文件夹下存放64位的库和应用程序。不要被名字迷惑了。