WIN10下使用VS2017的MSVC编译FFMPEG3.4.2动态静态库

本文介绍如何在Windows 10环境下利用MINGW和VS2017编译FFMPEG,包括配置静态库和动态库的具体步骤,并提供下载资源。

之前在Win10下成功编译nginx给了我不少信心,这两天尝试在Win10下编译FFMPEG,没想到给捣鼓成功了,记录一下。

首先下载MINGW,这个文章最后放我打包好的下载地址,直接将压缩包解压到C盘根目录下即可,即安装目录为C:\MinGW

里面已经包含了编译FFMPEG所需要的工具。

解压好后进到目录C:\MinGW\msys\1.0下,对msys.bat文件进行编辑

第二行路径修改为你安装的VS2017路径。

FFMPEG工程可以从我的GIT上下载https://gitee.com/main.c/ffmpeg-3.4.2

里面的Makefile即目录经过了简单修改,去掉了ftools即doc,test等的编译。

直接双击运行msys.bat,进入ffmpeg工程目录下,然后进行项目配置,这里贴下我的配置:

静态库:

./configure --target-os=win32 --disable-debug --enable-static --prefix=./vs2017_build_static --toolchain=msvc --disable-encoders --disable-ffserver --disable-ffplay --disable-avdevice --disable-avfilter --disable-postproc

动态库:

./configure --target-os=win32 --disable-debug --disable-static --enable-shared --prefix=./vs2017_build --toolchain=msvc --disable-encoders --disable-ffserver --disable-ffplay --disable-avdevice --disable-avfilter --disable-postproc

--target-os:目标为Window平台,自然选择win32

--disable-debug:禁用了调试信息

--prefix:这是执行make install后库文件所存放目录

--toolchain:编译器选择,使用VS2017的msvc

--disable-encoders:禁用编码器,因为我只使用解码功能

--disable-ffserver:禁用服务器

--disable-ffplay:禁止生成ffplay测试程序,我给删掉了已经

--disable-avdevice:之后几个disable都是我用不到的库,都禁用了

根据情况执行configure之后会在项目根目录下生成config.h文件,这个文件虽然说不建议编辑,但是要进行一次编辑的,打包保存为utf-8编码,默认是GBK编码,编译会不断弹出编码警告,如果不嫌烦可以不管;

好了,接下来直接make就OK了,正常情况下是不会有问题的;

make完之后执行make install将库文件以及头文件复制到之前配置的存放目录里后就OK了。

接下来讲讲怎么用VS2017去调用静态库,动态库就是生成的dll以及lib文件,没啥好说的,静态库这里生成的是.a文件,乍一看有点晕,因为.a静态库是LINUX下的库文件,在Windows上VS中能用吗?可放心使用,因为使用的是msvc编译的,就像.lib静态库一样使用即可,下面看下我的项目中调用的静态库配置:

好了,就讲这些了,工具包下载地址,一个包总是上传失败,优快云的BUG不少啊。。。

https://download.youkuaiyun.com/download/xinxinsky/10338448

https://download.youkuaiyun.com/download/xinxinsky/10338461

808, 905部标流媒体开源项目:https://github.com/Car-eye-team

QQ技术群: 590411159


<think>嗯,用户的问题是关于如何进行FFmpeg的静态编译以及如何在OpenCV中调用它。首先,我需要理解这两个步骤的具体流程和可能遇到的难点。 首先,静态编译FFmpeg。静态编译意味着将所有的依赖库都打包进最终的二进制文件中,这样在部署时不需要额外的动态链接库。用户可能需要这样做是为了确保在不同环境中运行的兼容性。我需要回忆FFmpeg编译选项,特别是静态编译相关的参数。记得configure的时候要加上--enable-static来启用静态编译,同时可能需要禁用共享库--disable-shared。此外,依赖库如x264、x265等也需要静态编译,否则FFmpeg可能还是动态链接它们。用户需要注意这些依赖的安装方式,可能需要通过源码编译这些库,并指定静态编译选项。比如,编译x264使用--enable-static。另外,编译FFmpeg时可能需要指定额外的参数,比如--pkg-config-flags="--static"来确保使用静态库。 接下来是OpenCV中调用静态编译FFmpeg。用户可能已经安装了动态链接的FFmpeg,但需要让OpenCV使用自己静态编译的版本。这时候,在编译OpenCV时需要正确指定FFmpeg的路径。可能需要设置环境变量PKG_CONFIG_PATH指向包含ffmpeg.pc文件的目录,这样pkg-config能找到静态库。另外,在CMake配置OpenCV时,需要确保FFIND_FFMPEG=ON,并且可能需要手动指定FFmpeg的包含路径和库路径。另外,用户可能会遇到OpenCV在编译时找不到FFmpeg的问题,这时候需要检查日志,确认是否成功链接了静态库。需要注意的是,静态编译可能会导致OpenCV生成的库文件较大,而且如果有其他依赖库,也可能需要一并静态编译,否则可能出现链接错误。 用户提供的引用中,引用[2]提到了新的FFmpeg包装器支持多线程解码,这可能与性能有关,但用户的问题是关于静态编译和调用,所以暂时不需要深入这点。引用[3]是关于在树莓派上编译VLC的教程,可能与硬件加速有关,但可能不直接影响FFmpeg的静态编译。引用[1]提到OpenCV Python绑定的命名问题,这可能和编译后的库文件命名有关,但用户的问题是关于C++层面的集成,所以可能关系不大。引用[4]和[5]是关于版本控制和高性能计算的库,可能不直接相关。 另外,用户可能遇到的常见问题包括:依赖库未正确静态编译,导致FFmpeg仍然动态链接;OpenCV在编译时没有正确找到FFmpeg静态库,导致链接失败;静态编译后的文件体积过大;不同平台(如Linux和Windows)下的编译差异。需要提醒用户注意这些点,并提供相应的解决建议,比如检查链接器参数,确认静态库是否被正确引用,处理可能的依赖冲突等。 最后,生成相关问题需要考虑用户可能的后续疑问,比如如何验证FFmpeg是否静态编译成功,如何处理依赖库的版本冲突,如何优化静态编译后的文件大小,或者在跨平台编译时的注意事项等。这些问题可以帮助用户进一步解决实际应用中可能遇到的困难。</think>### FFmpeg静态编译与OpenCV集成指南 #### 一、FFmpeg静态编译步骤 1. **安装依赖库** 需先静态编译第三方编码器(如x264、x265): ```bash # 编译x264 git clone https://code.videolan.org/videolan/x264.git cd x264 ./configure --enable-static --disable-shared make && sudo make install # 编译x265 git clone https://bitbucket.org/multicoreware/x265_git.git cd x265_git/build/linux cmake -G "Unix Makefiles" -DENABLE_SHARED=OFF ../source make && sudo make install ``` 2. **配置FFmpeg编译选项** 启用静态链接并指定依赖库路径: ```bash ./configure \ --enable-static \ --disable-shared \ --enable-gpl \ --enable-libx264 \ --enable-libx265 \ --pkg-config-flags="--static" ``` 3. **编译与验证** ```bash make -j$(nproc) sudo make install ldd ffmpeg # 输出应为"not a dynamic executable" ``` #### 二、OpenCV集成静态FFmpeg 1. **配置OpenCV编译环境** 通过CMake指定FFmpeg路径: ```bash cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D WITH_FFMPEG=ON \ -D FFMPEG_INCLUDE_DIR=/usr/local/include \ -D FFMPEG_LIB_DIR=/usr/local/lib \ -D FFMPEG_ROOT=/usr/local \ .. ``` 2. **解决常见问题** - **链接冲突**:若出现`multiple definition`错误,在CMake中添加链接降序: ```cmake set(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed -Wl,--no-as-needed") ``` - **Python绑定命名**:OpenCV Python扩展可能因命名规则不同导致导入失败,需手动重命名`.so`文件[^1]。 3. **验证集成结果** ```python import cv2 print(cv2.getBuildInformation()) # 检查FFmpeg状态 ``` #### 三、关键注意事项 1. **依赖版本对齐**:确保OpenCV与FFmpeg的API版本兼容,避免符号未定义错误。 2. **交叉编译适配**:在ARM平台需额外指定工具链,如树莓派需添加`-mcpu=cortex-a72`优化指令[^3]。 3. **性能优化**:启用多线程解码可提升视频处理效率(参考新版FFmpeg包装器设计[^2])。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值