zoukankan      html  css  js  c++  java
  • ffmpeg+x264 Windows MSVC 静态编译

         在为一个视频相关SDK添加h264编码支持时,Android/iOS平台都进展都很顺利,Windows想着也不不多,先编成静态库后扔Vistual Studio做链接,目标是最终都链接为一个动态库。因为有现成的编译shell脚本,开始尝试用mingw编译静态库,发现Vistual Studio链接时因为静态库依赖的 libgcc.a, libmingw.a, libmingwex.a 会与mscrt 有符号冲突,gcc和msvc两套crt怎么可能不冲突。查看ffmpeg、x264官方有文档说明都是支持使用 msvc 来编译,这样自然没有 crt 版本不一致造成冲突的问题。

    1. x264

    按照官方文档说明:

      The following example command will configure libx264:

    CC=cl ./configure --enable-static --prefix=<PREFIX> --extra-cflags="-DNO_PREFIX"
    make

    The NO_PREFIX flag may be necessary to make linkable libraries.

    执行方式:

     - 要求VS 2013 SP2+

     - 先执行 C:Program Files (x86)Microsoft Visual Studio 12.0Common7ToolsVsDevCmd.bat

     - 在切到 bash, [CC=cl] 使用 msvc 的编译器, 其他和在linux/mac 编译完全一样

      会编译生成可用的静态库: libx264.lib 

    2. ffmpeg

     使用的是最新3.0 版本,已经支持使用 msvc 工具链的编译。只要指定toolchain为msvc,但生成的文件后缀不是.lib而是.a,没关系,Virtual Studio 也是支持的。

    #!/bin/bash
    
    set -x
    
    prefix=$(pwd)/win32/install
    export PKG_CONFIG_PATH="$prefix/lib/pkgconfig" 
    
    mkdir -p win32/install
    
    cd ffmpeg
    if [[ ! -f config.mak ]]; then
      ./configure 
          --toolchain=msvc 
          --enable-gpl 
          --enable-nonfree 
          --enable-version3 
          --arch=x86 
          --target-os=mingw32 
          --pkg-config=pkg-config 
          --disable-stripping 
          --disable-everything 
          --enable-static 
          --disable-shared 
          --disable-doc 
          --enable-avresample 
          --enable-demuxer=rtsp 
          --enable-muxer=rtsp 
          --disable-ffplay 
          --disable-ffserver 
          --enable-ffmpeg 
          --disable-ffprobe 
          --enable-libx264 
          --enable-encoder=libx264 
          --enable-decoder=h264 
          --enable-protocol=rtp 
          --enable-hwaccels 
          --enable-zlib 
          --disable-devices 
          --disable-avdevice 
          --extra-cflags="-I$prefix/include -MT"  
          --extra-ldflags=-L$prefix/lib 
          --prefix=$prefix/ffmpeg
    fi
    make install

    参考:https://trac.ffmpeg.org/wiki/CompilationGuide/MSVC

  • 相关阅读:
    第十八章、使用集合
    第十九章、枚举集合
    第十七章、泛型概述
    第十六章、使用索引器
    第十五章、实现属性以访问字段
    第十四章、使用垃圾回收和资源管理
    第十三章、创建接口和定义抽象类
    AtCoder Grand Contest 018 E
    AtCoder Regular Contest 059 F Unhappy Hacking
    Codeforces 464E. The Classic Problem
  • 原文地址:https://www.cnblogs.com/lulu/p/5634550.html
Copyright © 2011-2022 走看看