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.0\Common7\Tools\VsDevCmd.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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM