win7 X64 编译ffmpeg
由于FFMpeg是基于Linux開發(fā)的開源項目,源代碼和Windows下最常見的Visual Studio提供的C/C++編譯器不兼容,
因此它不能使用MSVC++編譯。要想使用FFMpeg,最先要解決的問題就是在Windows下配置一個類似Linux的編譯環(huán)境,
將FFMpeg編譯為二進制庫以后,再利用其進行進一步開發(fā)。MSVC++并不嚴格的遵循C標準,所以整個編譯過程必須使用MSys+MinGW系統(tǒng)來完成。
如果選擇編譯動態(tài)鏈接庫(dll),這些庫將和其他的動態(tài)鏈接庫一樣在使用上沒什么差別,可以使用MSVC++來鏈接這些庫到自己的程序,只有這種情況下MSVC++是被支持的。
?
一、編譯過程
1、準備MSys+MinGW系統(tǒng)
下載整合版 Download mingw-get-setup.exe (86.5 kB)
之前編譯c++ 時用過,http://blog.csdn.net/kuaile123/article/details/11024873
不多說了,安裝目錄里 C:\MinGW\msys\1.0 就是 MSys
?
2、修改“msys.bat”
?用文本編輯器(如NotePad++)打開C:\MinGW\msys\1.0\msys.bat,由于打算用MSVC++編譯程序,所以需要有.lib文件才能鏈接到FFmpeg的庫,這些.lib文件可以使用微軟的工具鏈中l(wèi)ib命令產(chǎn)生。把下面一行加到msys.bat的最前面,把路徑替換成機器上vcvars32.bat實際存在的路徑,比如我的在“D:\Program Files\Microsoft Visual Studio2010\VC\bin”,于是就添加:
call "D:\Program Files\Microsoft Visual Studio2010\VC\bin\vcvars32.bat"
3、下載ffmpeg源碼
由于ffmpeg的源代碼存放在SVN倉庫里,所以必須使用命令行程序或是圖形界面程序來訪問。
首先下載TortoiseSVN,安裝完成后,在想要存放ffmpeg下郵件,選擇check out,輸入地址svn://svn.mplayerhq.hu/ffmpeg/trunk
點擊開始,開始下載,如下圖所示:我下載的版本40多M,網(wǎng)速不好的時候下載很容易中斷。
?
4、編譯
首先運行msys.bat,進入shell界面
轉(zhuǎn)到ffmpeg所在目錄: cd D:/ffmpeg
注意:目錄名使用正斜杠來分割,而不是Windows所使用的反斜杠(比如說要寫成"D:/ffmpeg"而不是"D:\ffmpeg")。
文件名或目錄名中如果帶有空格,必須用雙引號括起(例如這樣"/C/Program Files",帶有雙引號)。
不然會提示沒有此目錄
盤符(例如"C:\")可以從根目錄處訪問(像這樣"/C/")。
?
(1) 編譯靜態(tài)庫
(1.1)配置:
./configure --enable-static --enable-memalign-hack --prefix=C:/MinGW/msys/1.0 --extra-cflags="-fno-common"
注意執(zhí)行這句話時出現(xiàn)的問題,yasm是匯編編譯器,因為ffmpeg中為了提高效率用到了匯編指令,比如MMX和SSE。
這個過程要花費較長的時間,開始會有較長的時間沒有反應(yīng)。其中的prefix是msys的安裝路徑
如果出現(xiàn)提示: yasm not found, use --disable-yasm for a crippled build
解決方法(a)在網(wǎng)上下載一個yasm.exe并安裝在mingw/bin下面,編譯代碼時你注意看,會發(fā)現(xiàn)asm后綴的文件用的編譯器是yasm,c文件用的是gcc;
下載地址 http://yasm.tortall.net/Download.html?注意把下載下來的改名為 yasm.exe ,不然還是提示找不到。由于mingw為32位版本,最好下32位,以后后面有問題。
(b)不使用匯編指令,在配置時加上,即./configure??--disable-yasm
(1.2)編譯:make
(1.3)安裝: make install
??????????? 安裝只是把要開發(fā)使用的庫文件拷貝到c:/msys/1.0/lib/目錄中,頭文件拷貝到c:/msys/1.0/include/目錄中。產(chǎn)生的庫文件為.a文件
?
(2)編譯動態(tài)庫
如果希望使用FFmpeg包含的libavcodec庫開發(fā)多媒體文件處理程序,還需要編譯libavcodec的dll動態(tài)鏈接庫。
(2.1)配置:
./configure --enable-shared --disable-static --enable-memalign-hack --prefix=C:/MinGW/msys/1.0 --extra-cflags="-fno-common"
(2.2)編譯:
??? make
注意:當(dāng)運行到make這一步時出現(xiàn)問題:
c:\mingw\include\io.h: error : unknown typename 'off64_t'
make: ***[libavformat/applehttp.o]? error1
?
發(fā)現(xiàn)在io.h中已經(jīng)
/* MSVC's io.h contains the stuff from dir.h, so I will too.* NOTE: This also defines off_t, the file offset type, through* an inclusion of sys/types.h */#include <sys/types.h> /* To get time_t. */
在sys/types.h 文件中有如下一段:
已經(jīng)定義了off64_t,特別奇怪,不知道為啥沒法識別。
不管我是加了 #undef? _OFF64_T_ 還是 將周圍的變量注釋掉 只保留 typedef __int64 _off64_t; typedef __int64 off64_t;
都會出現(xiàn)更多的錯,我以為是64位系統(tǒng)的原因,但是我又在32位電腦上進行編譯,同樣的問題,不知道這是什么原因。在網(wǎng)上查也沒有人有這種問題,太奇怪了。
?
參考博客: http://blog.csdn.net/dragon101788/article/details/8679092總結(jié)
以上是生活随笔為你收集整理的win7 X64 编译ffmpeg的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何解决没有文件扩展“.js”的脚本引擎
- 下一篇: c++ 调用 ffmpeg 编程