本来在github上面下载了几个编译好的ffmpeg关于VS的解决方案,但是直接拿到我自己电脑上都不还会报错。所以最后自己尝试自己建立工程,进行编译,发现原来一点都不难。
下面不只是你需要准备的,也是我此次用到的,版本之类的应该没有太大的限制。
ffmpeg 4.1.3源码 ,http://ffmpeg.org/download.html (Get the Sources下面的就是源码了,默认下载最新版);ffmpeg 4.1.3 - dev开发库,https://ffmpeg.zeranoe.com/builds/ (选择下载你想编译的对应版本的dev类型的库,dev类型里面包含我们要用到的lib和部分h文件);ffmpeg 4.1.3 - share运行库,https://ffmpeg.zeranoe.com/builds/ (同上,选择下载你想编译的对应版本的share类型的库,share类型里面包含我们要用到的dll文件);nasm.exe,这个我忘记在哪里下载的了(解决编译错误的时候会用到)工程建立如下: 导入的文件列表如下:
我的目录结构如下: 将dev中lib全部导入lib目录中,(当然也可以进行这步操作,只要设置环境目录时正确就可以了)
我编译的是win32-Release版本的,
avcodec.lib avdevice.lib avfilter.lib avformat.lib avutil.lib postproc.lib swscale.lib swresample.lib应该会报一个和nasm相关的错误,这时把nasm.exe放到“D:\software\Microsoft\VS2015\VC”目录下。
百度吧,我也记不清了,应该挺简单的。
这是一个挺常见的错误了,不过这个里面的有点奇怪,有几个固定的这个错误去不掉,没找到原因,只能改代码了。
错误提示:LNK2019: 无法解析的外部符号 _avresample_configuration 解决方法:cmdutils.c文件中,print_all_libs_info里面的都注释掉,就只剩最后一个错误了。 错误提示:不能解析的外部符号__sync_synchronize 解决方法:自己写了一个取代他的函数 文件:compat\atomics\gcc\stdatomic.h
增加定义: void __sync_synchronize1() { ; } 修改__sync_synchronize使用位置,改为__sync_synchronize1 #define atomic_thread_fence(order) \ __sync_synchronize1() #define atomic_store(object, desired) \ do { \ *(object) = (desired); \ __sync_synchronize1(); \ } while (0) #define atomic_load(object) \ (__sync_synchronize1(), *(object))