在为一个视频相关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

ffmpeg+x264 Windows MSVC 静态编译的更多相关文章

  1. windows下使用mingw和msvc静态编译Qt5.15.xx

    windows下使用mingw和msvc静态编译Qt5.15.xx 下载并安装相关依赖软件 Python version 2.7 https://www.python.org/downloads/ ( ...

  2. Qt5.5.0在Windows下静态编译(修改参数以后才能支持XP)good

    测试系统环境: windows 7 编译软件环境: vs2013 + QT5.5.0 [源码地址:http://download.qt.io/official_releases/qt/5.5/5.5. ...

  3. Windows下静态编译Qt4

    既然是静态编译,那就要编译出来的程序不信赖于任何dll文件.首先下载qt-win-opensource-4.7.4-mingw.exe: http://get.qt.nokia.com/qt/sour ...

  4. windows下静态编译pthread

    1. Building the library as a statically linkable library-------------------------------------------- ...

  5. Windows 上静态编译 Libevent 2.0.10 并实现一个简单 HTTP 服务器(无数截图)

    [文章作者:张宴 本文版本:v1.0 最后修改:2011.03.30 转载请注明原文链接:http://blog.s135.com/libevent_windows/] 本文介绍了如何在 Window ...

  6. Windows 上静态编译 Libevent 2.0.10 并实现一个简单 HTTP 服务器(图文并茂,还有实例下载)

    [文章作者:张宴 本文版本:v1.0 最后修改:2011.03.30 转载请注明原文链接:http://blog.s135.com/libevent_windows/] 本文介绍了如何在 Window ...

  7. 记录下 QT Linux 静态编译遇到的坑

    Qt下静态编译Qt,根据我的经验,如果按照Windows下那种直接拿官方sdk安装之后的文件来编译是行不通的,需要直接下载Qt的source包,目前诺基亚的源码叫做qt-everywhere-open ...

  8. Linux下快速静态编译Qt以及Qt动态/静态版本共存

    Qt下静态编译Qt,根据我的经验,如果按照Windows下那种直接拿官方sdk安装之后的文件来编译是行不通的,需要直接下载Qt的source包,目前诺基亚的源码叫做qt-everywhere-open ...

  9. QT全平台设置图标,全平台静态编译 good

    1.  概述 当我们用QT写好了一个软件,要把你的程序分享出去的时候,不可能把编译的目录拷贝给别人去运行.编译好的程序应该是一个主程序,加一些资源文件,再加一些动态链接库,高大上一些的还可以做一个安装 ...

随机推荐

  1. C#之发送邮件【模板】+【封装】ZJ版

    PS: 为了弥补上篇博客的不足,正好周六闲着没事.所以进行优化下,来个终结版 功能实现:模板发送+自指定邮箱发送+解耦 总体预览如下: 各代码如下:(代码略多,所以都折叠了) 前台; @{ Layou ...

  2. 单独使用Mybatis的配置文件

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC & ...

  3. Java并发_volatile实现可见性但不保证原子性

    读后感 介绍了volatile实现可见性的基本原理 介绍了volatile不能实现原子性的示例,volatile复合操作不能实现原子性,读取值后在自增前改值可能被其它线程读取并修改,自增后刷新值可能会 ...

  4. zabbix利用api批量添加item,并且批量配置添加graph

    关于zabbix的API见,zabbixAPI 1item批量添加 我是根据我这边的具体情况来做的,本来想在模板里面添加item,但是看了看API不支持,只是支持在host里面添加,所以我先在一个ho ...

  5. php对应js math.random

    <?php function random($min = 0, $max = 1) {     return $min + mt_rand()/mt_getrandmax()*($max-$mi ...

  6. 初次认识 C# win32 api

    第一次接触win32api,刚开始的时候有点迷迷糊糊的. Windows API 就是windows应用程序接口. win api向上就是windows应用程序,向下就是windows操作系统核心. ...

  7. Python json.dumps 特殊数据类型的自定义序列化操作

    场景描述: Python标准库中的json模块,集成了将数据序列化处理的功能:在使用json.dumps()方法序列化数据时候,如果目标数据中存在datetime数据类型,执行操作时, 会抛出异常:T ...

  8. bat基础

    首先所有命令在cmd命令行中都能找到说明: 例如 想知道type用法 输入type /? 其他命令都一样 type [drive:][path] filename 显示文本文件内容 虽然有点鸡肋 1 ...

  9. ECC-Elliptic Curves Cryptography,椭圆曲线密码编码学

    ECC ECC-Elliptic Curves Cryptography,椭圆曲线密码编码学,是目前已知的公钥体制中,对每比特所提供加密强度最高的一种体制.在软件注册保护方面起到很大的作用,一般的序列 ...

  10. 安装LNMP(Nginx+Mysql+PHP)

    1:安装nginxyum install -y gcc pcre-devel openssl-develwget http://www.nginx.org/download/nginx-1.4.2.t ...