最近准备学习一下OBS Studio,在编译OBS时发现需要使用x264库,在windows下使用MinGW编译时遇到错误,最终解决了这个错误,在此记录下编译过程,以便以后再遇到这个问题时可以回来查阅。
make:*** [libx264.a] Error 5
编译环境:Windows 10 ltsc 2019、Visual Studio 2017 Community、MinGW
注意:我用的windows是一个干净的环境,在虚拟机中全新安装的。
1 下载X264代码
下载代码:https://www.videolan.org/developers/x264.html
2 准备交叉编译环境
2.1 下载MinGW
下载地址:https://osdn.net/projects/mingw/releases/
2.2 安装MinGW
MinGW安装比较简单,直接一直下一步就可以了,最后安装组件的时候选择下面图片中几个组件就可以了。
2.3 下载NASM
下载地址:https://www.nasm.us/pub/nasm/releasebuilds/2.14.02/win32/
解压zip包中的nasm.exe到MinGW的C:\MinGW\msys\1.0\bin目录。
3 编译x264
(1) 解压缩下载的x264代码,我解压到下面目录
(2)运行C:\MinGW\msys\1.0\msys.bat脚本,输入cd /d/clib/x264-master进入到代码目录
(3) 执行./conifgure --enable-shared命令编译动态库,需要花费一点时间,等待完成
(4)执行make编译x264,本以为可以顺利编译成功,到最后执行gcc-ar rc libx264.a命令时会报一个错误,如下
(5)解决make错误,修改configure文件
注意:make没有出错的朋友,请忽略这一步骤,文章最后会给出解决该问题的思路过程
修改成下面的样子,就是把AR=""和RANLIB=""替换成跟else语句下面一样的。
修改完毕后,再次执行./configure --enable-shared后make,编译成功
(6) 执行make install后,以后需要用到了.h、.dll和.lib文件会在MinGW下面的usr/local目录
(7) 拷贝文件至新目录,我保持目录结构如下,即与make install生成的一样,lib目录下.a文件,可以直接改名为.lib文件使用
(8) 测试运行x264.exe,出现下面提示表示编译的没有问题
4 解决make报错的过程
解决make时的错误,观察了最后一行命令时在 gcc-ar rc libx264.a时出现错误,于是百度了一下gcc-ar,发现都是关于ar工具的资料,怀疑是不是MinGW安装的有问题。
于是用everything搜索了一下 ar.exe ,发现在MinGW目录下ar.exe有两个其中一个gcc-ar.exe只有81kb,另外一个有946kb。
我将上面的gcc-ar rc libx264.a xxx.o...(省略N多.o文件)复制一遍,替换为ar rc libx264.a xxx.o...(省略N多.o文件),最后执行成功了(忘记截图)。
于是我把gcc-ar.exe名称修改为gcc-ar.exe.bk,然后复制了一个ar.exe名称改为gcc-ar.exe。
再次执行./configure --enable-shared,然后make,在gcc-ar那一步没有报错,但是在gcc-ranlib这一步报错了(此处忘记截图)。
我又查看了gcc-ranlib.exe文件,发现也只有81kb,然后有一个rablib文件946kb。
此时我在想是不是可以不复制exe文件,而通过修改配置文件来解决这个问题。
打开代码目录下的configure文件,搜索了一下 gcc-ar,找到下面代码。直接将下面蓝色行代码复制替换红色行。