Arm平臺集成FFmpeg編譯動態庫庫時av_make_error_string錯誤的解決方法

編譯環境

  • 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的內存直至程序終止才釋放。由於時間倉促,暫未找到其他更好的解決方案。待後續更新…

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章