編譯環境
- Linux: ubuntu 16.04 LTS
- arm-linux: 4.8.5
- FFmpeg: 3.4.2
- C++: std=c++11
情況描述
- 個人製作動態庫需要集成FFmpeg,其中會使用到FFmpeg的轉化錯誤提示接口av_err2str,其實它是如下宏定義:
#define av_err2str(errnum) \
av_make_error_string((char[AV_ERROR_MAX_STRING_SIZE]){0}, AV_ERROR_MAX_STRING_SIZE, errnum)
- 因爲上面這句宏定義中存在動態申請臨時變量
(char[AV_ERROR_MAX_STRING_SIZE]){0}
,這種在我所編譯的環境中是不被允許的,因此需要單獨提取出來進行控制。 - 錯誤如下:
解決思路
單獨將char[AV_ERROR_MAX_STRING_SIZE]){0}提出出來進行變量設置,如:
char av_error[AV_ERROR_MAX_STRING_SIZE] = {0};
但是當多次調用的av_err2str時候將會出現av_error重複被定義的錯誤,因此可以將添加static關鍵字設置爲靜態變量。
static char av_error[AV_ERROR_MAX_STRING_SIZE] = {0};
#define av_err2str(errnum) \
av_make_error_string(av_error, AV_ERROR_MAX_STRING_SIZE, errnum)
再次編譯,完美解決。但是這種方案存在內存消耗問題,可能導致av_error的內存直至程序終止才釋放。由於時間倉促,暫未找到其他更好的解決方案。待後續更新…