首先说一下mingw和msys是干啥的,mingw本质上一个开发工具链,它提供了针对win32应用的GNU工具链,以及对等于windows SDK的头文件和用于MinGW版本链接的库文件(so,a等,而不是msvc的dll,lib),所以如果程序只用到C/C++标准库,而不用到POSIX API,是可以用MinGW在windows环境下编译的,编译出来的静态库,动态库是可链接的,并且可以通过msvc来链接的。所以就跟原生的windows程序一样,只是编译的工具不同。
msys是提供一个除了开发工具链以外的类Unix环境,就是模拟了Unix的目录结构和shell环境。
msys2和MinGW-W64可以理解为msys和mingw的升级版。
下面我要编译的x264,现在已经不提供msvc的编译配置,而是提供的GCC的编译配置,而的代码本身是可以在window下编译的,所以直接使用MinGW来编译是最方便的。我要编译出64位版本和32位版本的x264静态库,而mingw只是提供32位环境,所以我选择通过ming-w64+msys2作为编译环境。
我们先安装msys2,安装比较简单直接下一步下一步就好了。通过msys2的pcaman包管理工具来安装MinGW-W64,这种方式最简单。
pacman -S mingw-w64-x86_64-toolchain
pacman -S mingw-w64-i686-toolchain
通过上面两个命令分别安装64位工具链的和32位的工具链,工具链中已经包含了gcc,g++,gdb,make的等工具。如下图:
x264的编译需要注意一定要配置打开汇编,因为x264对一些常见的CPU架构做了汇编优化,如果不配置使用汇编,编码性能会大大的降低。
针对windows的x86平台,先安装nasm,下面演示64位版本,通过mingw64.exe启动64位环境,安装nasm,通过如下命令:
pacman -S nasm
进入x264源码目录,通过configure配置编译选项,如下:
./configure --host=x86_64-w64-mingw32 --enable-static --disable-cli
configure结果如下:
红框标识的需要注意下,分别表示:64位,关闭命令行模式,汇编开启,再直接make即可
编译32位静态流程一样,通过mingw32.exe启动32位环境,安装nasm,使用如下configure配置:
./configure --host=i686-w64-mingw32 --enable-static --disable-cli
参数如下配置,同样注意下需要的配置项。再make即可。
注意: 在configure的过程中可能会报错,这时可以查看下config.log的具体报错信息,做相应修改即可。
这里编译出来的libx264.a是需要使用MSVC来链接到目标程序的,关于MSVC如何使用mingw的库,这里有几点需要了解的:
x264提供的接口已经添加了extern "C"所以这个静态库可以直接使用。在链接目标程序时,可能会报mingw中的某个函数找不到定义,所以需要将libmingw32.a,
libmingwex.a,libmingwthrd.a都链接上,这个三个库在对应的64位或32位的mingw-w64安装目录中。