?????? 不得不說,前人的經驗還是很重要的,但是隨著時間的推移,很多東西都改變了,所以,現在把最新的編譯方法記下,以便后人借鑒。
?
1.首先還是要先安裝MSYS(注意,要先安裝MSYS,后安裝MINGW)
到http://sourceforge.net/projects/mingw/files/這里下載一個最新版的exe文件就可以了,以前的可能要自己去下載一些亂七八糟的不知道是什么的,現在只需要到 MSYS base System 文件夾下下載一個最新的exe安裝文件,這個是minimum的安裝文件。
我下載的是MSYS-1.0.11.exe,我安裝在D盤。
?
2.安裝MINGW
(這里普及一下常識,其實MINGW里面包含有GCC的編譯器,但是我只安裝了MSYS,沒有安裝MINGW的時候,編譯的時候就會提示出錯,因為沒有GCC編譯器,所以,必須安裝MINGW就是這個原因)
網址與步驟1的一樣,然后到Automated MinGW Installer這個文件夾下面,下載最新的MINGW安裝文件,這個也是最小安裝文件。
PS:我不得不感嘆,隨著科技的發展,真是越來越好了,以前要自己一個一個下,現在是人家都全部打包好,讓你直接安裝就OK了。
注意:安裝MINGW的時候,要將其安裝在MSYS的MINGW目錄下。例如:當時我的安裝目錄是D:/msys,然后,進去的話,可以發現,里面有一個MINGW文件夾,但是里面是空的。在安裝MINGW的時候,將其指向該目錄就可以了,我的是D:/msys/1.0/mingw。
?
3. 整合MSYS和MINGW(此步驟借鑒前人,但稍有修改)
(1)修改 msys.bat:
?用文本編輯器打開D:/msys/1.0/msys.bat,由于打算要用MSVC++鏈接到FFmpeg的庫,
?所以需要有.lib文件才行,這些.lib文件可以使用微軟的工具中的lib命令產生,
?所以要預先安裝VC++。
?把下面一行加到msys.bat的最前面,把路徑替換成機器上vcvars32.bat實際存在的路徑,
?比如我的在“D:/Program Files/Microsoft Visual Studio 8/VC/bin”,
?于是就添加:
它是一個運行著 bash 的rxvt程序。
這是一個在Windows上運行并且就像是在使用一個真正的Linux shell。
不過使用這個shell時需要注意:
1. 目錄名使用左斜杠來分割,而非Windows所使用的右斜杠;
(比如"D:/ffmpeg"而非D:/ffmpeg")。
2. 盤符(例如"C:/")可以從根目錄處訪問(像這樣"/C/");
下面切換到存放FFmpeg源代碼的目錄,方法是輸入:cd /D/ffmpeg
接下來要配置FFmpeg,這里先輸入:./configure --enable-memalign-hack
--enable-memalign-hack選項是FFmpeg在Windows上編譯成功所必須指定的,
待配置完成后,將回到命令提示符。
如果沒有錯誤的話,就可以"make"具有基本功能的FFmpeg了,在提示符后輸入:make
編譯的過程將持續很長時間。如果一切正常,結束后將返回提示符。
這時程序已經編譯好了,在存放FFmpeg源代碼的目錄下可以找到ffmpeg.exe這個文件。
如果希望把FFmpeg安裝到系統中,可以執行安裝步驟:"make install",
這將會復制所有生成的重要文件到MSys的local文件夾下。
如果希望使用FFmpeg包含的libavcodec庫開發多媒體文件處理程序,還需要編譯libavcodec的dll動態鏈接庫,編譯過程和上述過程稍有差別,如下所述:
首先切換到FFmpeg的源代碼目錄,
在開始編譯前先使用"make distclean"清理上一次留下的中間文件(慎用!!之前的作者是說要用這個,我用完之后,電腦就崩潰了,重啟才OK,所以,大家慎用啊~!)
然后向configure腳本多傳遞兩個參數:
./configure --enable-shared --disable-static --enable-memalign-hack
如果沒有錯誤的話,在提示符后輸入:make
libavcodec的lib靜態庫,編譯過程和上述過程稍有差別,如下所述:
./configure --enable-static?--disable-shared?--enable-memalign-hack
如果沒有錯誤的話,在提示符后輸入:make
在FFmpeg目錄下有三個子目錄名字分別為:libavutil、libavcodec和libavformat;
如果在前述步驟中成功生成了動/靜態鏈接庫,例如我生成的是avcodec-51.lib、
avformat-51.lib 和 avutil-49.lib,MSVC++可以從這些文件中知道dll的導出函數。