最近準(zhǔn)備學(xué)習(xí)一下OBS Studio,在編譯OBS時發(fā)現(xiàn)需要使用x264庫,在windows下使用MinGW編譯時遇到錯誤,最終解決了這個錯誤,在此記錄下編譯過程,以便以后再遇到這個問題時可以回來查閱。
make:*** [libx264.a] Error 5
編譯環(huán)境:Windows 10 ltsc 2019、Visual Studio 2017 Community、MinGW
注意:我用的windows是一個干凈的環(huán)境,在虛擬機中全新安裝的。
1?下載X264代碼
下載代碼:https://www.videolan.org/developers/x264.html

2 準(zhǔn)備交叉編譯環(huán)境
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)? 執(zhí)行./conifgure --enable-shared命令編譯動態(tài)庫,需要花費一點時間,等待完成

(4)執(zhí)行make編譯x264,本以為可以順利編譯成功,到最后執(zhí)行g(shù)cc-ar rc libx264.a命令時會報一個錯誤,如下

(5)解決make錯誤,修改configure文件
? ??????注意:make沒有出錯的朋友,請忽略這一步驟,文章最后會給出解決該問題的思路過程

修改成下面的樣子,就是把AR=""和RANLIB=""替換成跟else語句下面一樣的。

修改完畢后,再次執(zhí)行./configure --enable-shared后make,編譯成功

(6) 執(zhí)行make install后,以后需要用到了.h、.dll和.lib文件會在MinGW下面的usr/local目錄


(7) 拷貝文件至新目錄,我保持目錄結(jié)構(gòu)如下,即與make install生成的一樣,lib目錄下.a文件,可以直接改名為.lib文件使用

(8)?測試運行x264.exe,出現(xiàn)下面提示表示編譯的沒有問題

4 解決make報錯的過程
解決make時的錯誤,觀察了最后一行命令時在 gcc-ar rc libx264.a時出現(xiàn)錯誤,于是百度了一下gcc-ar,發(fā)現(xiàn)都是關(guān)于ar工具的資料,懷疑是不是MinGW安裝的有問題。

于是用everything搜索了一下 ar.exe ,發(fā)現(xiàn)在MinGW目錄下ar.exe有兩個其中一個gcc-ar.exe只有81kb,另外一個有946kb。

我將上面的gcc-ar rc libx264.a xxx.o...(省略N多.o文件)復(fù)制一遍,替換為ar rc libx264.a xxx.o...(省略N多.o文件),最后執(zhí)行成功了(忘記截圖)。
于是我把gcc-ar.exe名稱修改為gcc-ar.exe.bk,然后復(fù)制了一個ar.exe名稱改為gcc-ar.exe。
再次執(zhí)行./configure --enable-shared,然后make,在gcc-ar那一步?jīng)]有報錯,但是在gcc-ranlib這一步報錯了(此處忘記截圖)。
我又查看了gcc-ranlib.exe文件,發(fā)現(xiàn)也只有81kb,然后有一個rablib文件946kb。

此時我在想是不是可以不復(fù)制exe文件,而通過修改配置文件來解決這個問題。
打開代碼目錄下的configure文件,搜索了一下 gcc-ar,找到下面代碼。直接將下面藍色行代碼復(fù)制替換紅色行。

