最近項目需要用到FFmpeg,于是按照網上的教程配置了一下,配置成功後在編譯時出現了一些問題,這裡記錄一下。
這是安裝成功後的情況
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHL90TUa5WNXlVe50mYsJ1MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL5UzM1UTMxUTM0ITMwkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
這個界面顯示安裝成功,并且環境也配置成功。在代碼中使用時出現一些問題。我的代碼中包含頭檔案
#include <libavutil/opt.h>
#include <libavcodec/avcodec.h>
#include <libavutil/imgutils.h>
1. 編譯時出現錯誤:
fatal error:libavutil/opt.h:沒有那個檔案或目錄
compilation terminated.
fatal error:libavcodec/avcodec.h:沒有那個檔案或目錄
compilation terminated.
fatal error:libavutil/imgutils.h:沒有那個檔案或目錄
compilation terminated.
解決方法:
在編譯時指明頭檔案的路徑/usr/local/ffmpeg/include。我原本的指令是:
gcc test.c -o test
更改指令為:
gcc test.c -o test -I /usr/local/ffmpeg/include
編譯成功。具體路徑按照個人安裝時設定而定。
2. 編譯時出現錯誤:
acc.c:(.text+0x1e3):對‘avcodec_register_all’未定義的引用
acc.c:(.text+0x1ed):對‘avcodec_alloc_context3’未定義的引用
acc.c:(.text+0x278):對‘av_get_channel_layout_nb_channels’未定義的引用
acc.c:(.text+0x2a0):對‘avcodec_find_encoder_by_name’未定義的引用
acc.c:(.text+0x2da):對‘avcodec_open2’未定義的引用
acc.c:(.text+0x2f7):對‘av_frame_alloc’未定義的引用
acc.c:(.text+0x350):對‘av_samples_get_buffer_size’未定義的引用
acc.c:(.text+0x366):對‘av_malloc’未定義的引用
acc.c:(.text+0x3a3):對‘avcodec_fill_audio_frame’未定義的引用
acc.c:(.text+0x3af):對‘av_init_packet’未定義的引用
acc.c:(.text+0x436):對‘avcodec_encode_audio2’未定義的引用
acc.c:(.text+0x46b):對‘av_free_packet’未定義的引用
解決辦法:
雖然指明了路徑,但是頭檔案之間存在依賴關系,程式編譯沒有指明頭檔案的調用順序,編譯時添加:
-L /usr/local/ffmpeg/lib -lavformat -lavcodec -lswresample -lavutil
3. 安裝好FFmpeg後我需要用到fdk-aac,是以得安裝fdk-aac後重新安裝一下FFmpeg,在進行FFmpeg的make步驟時出現錯誤
libavcodec/libfdk-aacenc.o libavcodec/libfdk-aacenc.c: In function ‘aac_encode_init’: libavcodec/libfdk-aacenc.c:293:34: error: ‘AACENC_InfoStruct {aka struct }’ has no member named ‘encoderDelay’
avctx->initial_padding = info.encoderDelay;
這個錯誤是因為安裝的fdk-aac版本太新了,可以安裝低一點的版本。我是安裝了fdk-aac-2.0.0後出現了錯誤,換到fdk-aac-0.1.6後成功。
fdk-aac下載下傳連結:https://sourceforge.net/projects/opencore-amr/files/fdk-aac/