FFMpeg中的執行個體output_example.c的編譯
關於ffmpeg在windows上的編譯,在www.ffmpeg.com.cn上有詳細的講解,在成功編譯好ffmpeg後,便在MSVC中編譯ffmpeg內建的執行個體output_example.c。首先自己在MSVC下建立一個空的控制台的應用程式,將output_example.c加入到工程中。由於在MSVC中是使用編譯ffmpeg時生產的.lib和.dll檔案,所以我們需要串連它們。在這裡我們需要avcodec-51.lib、avformat-51.lib和avutil-49.lib這三個靜態庫,故在我們編譯工程之前就將它們加到工程中。 編譯會發現提示: Cannot open include file: 'inttypes.h': No such file or directory 的出錯資訊,可通過如下方法解決:
1、找到include目錄中的ffmpeg/common.h
2、在“#define COMMON_H”之後加入如下代碼,同時刪除“#include <inttypes.h>” 然後儲存:#if defined(WIN32) && !defined(__MINGW32__) && !defined(__CYGWIN__)<br /># define CONFIG_WIN32<br />#endif<br />#if defined(WIN32) && !defined(__MINGW32__) && !defined(__CYGWIN__) && !defined(EMULATE_INTTYPES)<br /># define EMULATE_INTTYPES<br />#endif<br />#ifndef EMULATE_INTTYPES<br /># include <inttypes.h><br />#else<br /> typedef signed char int8_t;<br /> typedef signed short int16_t;<br /> typedef signed int int32_t;<br /> typedef unsigned char uint8_t;<br /> typedef unsigned short uint16_t;<br /> typedef unsigned int uint32_t;<br /># ifdef CONFIG_WIN32<br /> typedef signed __int64 int64_t;<br /> typedef unsigned __int64 uint64_t;<br /># else /* other OS */<br /> typedef signed long long int64_t;<br /> typedef unsigned long long uint64_t;<br /># endif /* other OS */<br />#endif /* EMULATE_INTTYPES */<br /> 再次編譯出現錯誤 error C2054: 在“inline”之後應輸入“(” 這樣一系列錯誤,我們只要在“#define COMMON_H”之後加入如下代碼 #if defined(WIN32) && !defined(__cplusplus)
#define inline __inline
#endif 再次編譯發現出現error LNK2019: 無法解析的外部符號_snprintf,該符號在函數_main 中被引用這個串連錯誤(注意要是沒有將開頭說的那三個庫先加入,這兒出現的串連錯誤更多)。 分析後知道錯誤是由第470行 snprintf(oc->filename, sizeof(oc->filename), "%s", filename); 引起的,解決方案如下:MSVC 2005: 修改為_snprintf_s(oc->filename, _countof(oc->filename), 1024, "%s", filename); MSVC 6.0 修改為_snprintf(oc->filename, sizeof(oc->filename), "%s", filename)。