1. 程式人生 > >Windows下vs2013編譯ffmpeg原始碼

Windows下vs2013編譯ffmpeg原始碼

在蒐羅網上各種資源以及網上請教各位大聲終於在今天晚上編譯成功,經測試編譯出來的庫可正常使用,故可證明編譯正確。在此特感謝群裡大神的幫助。感謝雷神

現將具體步驟記錄如下;

本人編譯用的是vs2013,在win7系統下,對ffmpeg-3.0進行編譯,其他版本尚未測試,後續若有問題會補充。

1、下載ffmpeg原始碼,可自行到ffmpeg官網上下載個版本的原始碼;

2、下載安裝器MinGW,然後安裝,安裝過程會有選擇,我直接用的預設的;

3、下載yasm,改名為yasm.exe拷貝至C:\MinGW\msys\1.0\bin目錄下;

4、配置C:\MinGW\msys\1.0\bin\msys.bat,用編輯模式開啟,在檔案最前面也就是@echo off之後,加上下面一句(各位路徑按自己的來)

call "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\vcvars32.bat"

5、重新命名C:\MinGW\msys\1.0\bin\link.exe,防止與VC發生衝突,編譯完後可改回來;

6、開始配置,雙擊C:\MinGW\msys\1.0\msys.bat,調到ffmpeg原始碼所在位置,我使用的配置選項為:

./configure --enable-shared --disable-static --prefix=./vs2013_build --enable-debug --toolchain=msvc,耐心等待配置完成;

7,、接下來就是make all 和make install,完工。

此時可以檢視在原始碼目錄下生成了一vs_2013bulid的目錄,裡面包含include、lib等資料夾。

下面繼續介紹如何利用編譯出來的庫來執行example中的小程式。

1、vs2013新建一個win32應用程式;將example中的一個程式程式碼粘進去;

2、配置vs2013屬性,在 vc++目錄->包含目錄 行內填入編譯出來的include所在路徑,在vc++目錄->庫目錄 行內填入編譯出來的.lib所在檔案路徑,這裡注意,將.dll連結庫放到工程Debug目錄下。我編譯出來的.lib庫檔案和.dll檔案都在vs2013_bulid\bin目錄下,而不再lib目錄下,lib目錄下都是.def檔案和pkgconfig資料夾,有大神可以解釋一下為什麼嗎?pkgconfig和.def在這兒有用嗎?

3、在include資料夾里加上_mingw.h、inttypes.h和stdint.h三個檔案,到此屬性配置完畢;

4、將所有#include都放到extern “C”中,原因是ffmpeg為C語言編寫,在其下面寫

#pragma comment(lib,"avcodec.lib")
#pragma comment(lib,"avformat.lib")
#pragma comment(lib,"avutil.lib")

大家根據需要寫入需要的.lib庫。

程式碼中在最上方加入#define __STDC_CONSTANT_MACROS,為防止出現

fatal error C1189: #error :  missing -D__STDC_CONSTANT_MACROS / #define __STDC_CONSTANT_MACROS

此時編譯工程,會出現各種語法錯誤,都可通過查詢解決,如snprintf()改為_snprintf(),還有在inttypes.h中,有的變數中間多了個空格導致編譯錯誤。總之都是些小的錯誤了。修改完之後就可以編譯成功了。

寫的匆忙,有不詳細和錯誤的地方,請各位大神朋友指出,感謝。