首页 > 系统相关 >Windows下编译FFmpeg

Windows下编译FFmpeg

时间:2023-09-03 18:44:09浏览次数:41  
标签:enable SLIB FFmpeg Windows SLIBNAME 编译 disable INSTALL --

Windows下在编译前需要修改环境变量,确保有这两个变量 INCLUDE 以及 PKG_CONFIG_PATH

除此之外,我们还对编出来的库有些其它要求,例如,库名中不能有版本号相关的信息,

修改configure

    win32|win64)
        disable symver
        if enabled shared; then
            # Link to the import library instead of the normal static library
            # for shared libs.
            LD_LIB='%.lib'
            # Cannot build both shared and static libs with MSVC or icl.
            disable static
        fi
        enabled x86_32 && check_ldflags -LARGEADDRESSAWARE
        shlibdir_default="$bindir_default"
        SLIBPREF=""
        SLIBSUF=".dll"
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
        SLIB_CREATE_DEF_CMD='EXTERN_PREFIX="$(EXTERN_PREFIX)" $(SRC_PATH)/compat/windows/makedef $(SUBDIR)lib$(NAME).ver $(OBJS) > $$(@:$(SLIBSUF)=.def)'
        SLIB_INSTALL_NAME='$(SLIBNAME)'        # 修改为SLIBNAME
        SLIB_INSTALL_LINKS=
        SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)' # 修改为 SLIBNAME
        SLIB_INSTALL_EXTRA_LIB='$(SLIBNAME:$(SLIBSUF)=.def)'
        SHFLAGS='-dll -def:$$(@:$(SLIBSUF)=.def) -implib:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)' #
        enabled x86_64 && objformat="win64" || objformat="win32"
        ranlib=:
        enable dos_paths
        add_extralibs -lole32 
        add_extralibs -ladvapi32
        ;;

修改ffbuild\library.mak

$(SUBDIR)lib$(NAME).ver: $(SUBDIR)lib$(NAME).v $(OBJS)
	$$(M)sed 's/MAJOR/$(lib$(NAME)_VERSION_MAJOR)/' $$< | $(VERSION_SCRIPT_POSTPROCESS_CMD) > $$@

## $(SUBDIR)$(SLIBNAME_WITH_MAJOR): $(SUBDIR)$(SLIBNAME_WITH_MAJOR)
##	echo "$(Q)cd ./$(SUBDIR) && $(LN_S) $(SLIBNAME_WITH_MAJOR) $(SLIBNAME)"

$(SUBDIR)$(SLIBNAME): $(OBJS) $(SLIBOBJS) $(SUBDIR)lib$(NAME).ver
	$(SLIB_CREATE_DEF_CMD)
	$$(LD) $(SHFLAGS) $(LDFLAGS) $(LDSOFLAGS) $$(LD_O) $$(filter %.o,$$^) $(FFEXTRALIBS)
	$(SLIB_EXTRA_CMD)

ifdef SUBDIR
# $(SUBDIR)$(SLIBNAME_WITH_MAJOR): $(DEP_LIBS)
  $(SUBDIR)$(SLIBNAME): $(DEP_LIBS)
endif

还需要保留库里面的符号信息,修改ffbuild\library.mak

install-lib$(NAME)-shared: $(SUBDIR)$(SLIBNAME)
	$(Q)mkdir -p "$(SHLIBDIR)"
	$$(INSTALL) -m 755 $$< "$(SHLIBDIR)/$(SLIB_INSTALL_NAME)"
	# 注释下该行 $$(STRIP) "$(SHLIBDIR)/$(SLIB_INSTALL_NAME)"
	$(Q)$(foreach F,$(SLIB_INSTALL_LINKS),(cd "$(SHLIBDIR)" && $(LN_S) $(SLIB_INSTALL_NAME) $(F));)
	$(if $(SLIB_INSTALL_EXTRA_SHLIB),$$(INSTALL) -m 644 $(SLIB_INSTALL_EXTRA_SHLIB:%=$(SUBDIR)%) "$(SHLIBDIR)")
	$(if $(SLIB_INSTALL_EXTRA_LIB),$(Q)mkdir -p "$(LIBDIR)")
	$(if $(SLIB_INSTALL_EXTRA_LIB),$$(INSTALL) -m 644 $(SLIB_INSTALL_EXTRA_LIB:%=$(SUBDIR)%) "$(LIBDIR)")

由于zip_decoder.c需要依赖zlib库,我们需要将包含有函数符号信息的zlib.lib文件存放到根目录下,不然将编译不通过

Windows编译64位FFmpeg脚本:

echo "Start Configure"

echo "./configure --toolchain=msvc --disable-static --disable-programs --enable-shared --disable-devices --disable-filters --disable-protocols --disable-demuxers --disable-muxers --disable-decoders --disable-autodetect --disable-encoders --enable-decoder=h264 --enable-decoder=mjpeg --disable-parsers --enable-parser=h264 --enable-parser=mjpeg --disable-stripping --disable-x86asm --disable-iconv --disable-pthreads --enable-w32threads --extra-ldflags=zlib.lib --prefix=./build/build-x64-windows/"
./configure --toolchain=msvc --disable-static --disable-programs --enable-shared --disable-devices --disable-filters --disable-protocols --disable-demuxers --disable-muxers --disable-decoders --disable-autodetect --disable-encoders --enable-decoder=h264 --enable-decoder=mjpeg --disable-parsers --enable-parser=h264 --enable-parser=mjpeg --disable-stripping --disable-x86asm --disable-iconv --disable-pthreads --enable-w32threads --extra-ldflags=zlib.lib --prefix=./build/build-x64-windows/

if [ $? != 0 ]
then
    exit $?
fi

sed -i "s/HAVE_SCHED_GETAFFINITY *1/HAVE_SCHED_GETAFFINITY 0/" config.h

echo "Configure Finished"

echo "Start Make"
make clean
make -j4

echo "Start Make Install"
make install
cp libav*/*.pdb     ./build/build-x64-windows/pdb/
cp libsw*/*.pdb     ./build/build-x64-windows/pdb/
echo "Make Install Finished"

最后FFmpeg在生成动态库后,还需要把zlib.dll放进去,否则编译出来的程序运行不起来

32位的库类似,如果需要添加对ffplay的支持的话,需要修改configure的配置项如下:

./configure --toolchain=msvc --disable-static --disable-ffmpeg --disable-ffprobe --enable-shared --enable-sdl2 --enable-ffplay --disable-devices --disable-filters --disable-protocols --disable-demuxers --disable-muxers --disable-decoders --disable-autodetect --disable-encoders --enable-decoder=h264 --enable-decoder=mjpeg --disable-parsers --enable-parser=h264 --enable-parser=mjpeg --disable-stripping --disable-x86asm --disable-iconv --disable-pthreads --enable-w32threads --extra-ldflags=SDL2.lib --extra-ldflags=SDL2main.lib --extra-ldflags=zlib.lib --prefix=./build/build-x86-windows/

标签:enable,SLIB,FFmpeg,Windows,SLIBNAME,编译,disable,INSTALL,--
From: https://www.cnblogs.com/siberiawind/p/17675341.html

相关文章

  • vivado 教程笔记 -创建工程 - 编译 - 布局布线 - 生成bit - 下板验证
    1、创建工程工程就算创建完了。2、 创建源文件双击打开后,就可以敲入代码 3、语法编译、布局布线、IO配置约束输入完一个完整代码后,先对语法进行综合分析,可直接跳过RTLANALYSIS,直接点击SYNTHESIS(综合)进行布局布线布局布线完后,IO管脚配置约束有时......
  • 设置Windows10暂停更新3000天
    1、运行cmd,执行以下命令:regadd“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings”/vFlightSettingsMaxPauseDays/treg_dword/d3000/f2、到更新设置里面设置暂停更新:   ......
  • Lnton 羚通算法算力云平台在环境配置中 Windows10-YOLOv8 运行报错是什么原因
    在配置Windows10环境下运行YOLOv8时,报错可能有多种原因。以下是一些可能导致错误的常见原因:缺少依赖项:YOLOv8可能需要一些额外的依赖项,如OpenCV、CUDA、cuDNN等。请确保你已经正确安装了这些依赖项,并且版本与YOLOv8的要求相匹配。文件路径错误:检查你的文件路径是否正确。确保模型......
  • msvc++中的预编译头文件pch.hpp和stdafx.h
    预编译头文件在VisualStudio中创建新项目时,会在项目中添加一个名为pch.h的“预编译标头文件”。(在VisualStudio2017及更高版本中,该文件名为stdafx.h)此文件的目的是加快生成过程。应在此处包含任何稳定的标头文件,例如标准库标头(如)。预编译标头仅在它或它包含的任何......
  • 掌握Go的运行时:从编译到执行
    讲解Go语言从编译到执行全周期流程,每一部分都会包含丰富的技术细节和实际的代码示例,帮助大家理解。关注微信公众号【TechLeadCloud】,分享互联网架构、云服务技术的全维度知识。作者拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成......
  • centos stream 9 编译 python3.11.5 源代码
    wgethttps://www.python.org/ftp/python/3.11.5/Python-3.11.5.tgztar-zxvfPython-3.11.5.tgzcdPython-3.11.5执行配置帮助./configure--help主要是想设置安装路径Installationdirectories:--prefix=PREFIXinstallarchitecture-independentfilesinP......
  • php:查看安装时的编译参数(php 8.2.5)
    一,用-i参数[liuhongdi@img~]$/usr/local/soft/php8.2.5/bin/php-i|grepconfigureConfigureCommand=>  './configure'  '--prefix=/usr/local/soft/php8.2.5''--with-config-file-path=/usr/local/soft/php8.2.5/etc''--with-c......
  • 记录centos stream 9 编译qt5.15.10源码
    开始装的一些依赖库没有记录gcc之类的,都是通过dnf安装的主要是make过程中出现的问题(qtwebengine)及其如何解决编译的命令如下./configure-prefix/home/kun/usr/Qt/5.15.10-opensource-confirm-licensemake-j16makeinstallconfigure阶段失败一般都是缺少,都是dnf解决的......
  • Qt编译报错:multiple definition of
    解决方法一:在.pro文件下查看SOURCES+=和HEADERS+=也没有重复引入文件,删除重复的文件即可。解决方法二:把debug文件夹下的.o文件都删除,然后再编译下。解决方法三:如果.h文件中有类的定义和实现,则实现时在每个成员前加inline。  转载于:QT项目出现multipledefinitionof错误......
  • c++编译
    1.1c++编译c++脚本程序写完之后,并不能直接运行,需要进行编译,转成.o文件,再链接才能运行,一般包括:预处理,汇编,编译。链接四步,如下:预编译把.c源文件编译成.ii预处理文件gcc-E[源文件.c]-o[自定义名.ii]编译成汇编语言把.i文件编译成.s汇编语言文件gcc-S[......