FFMpeg使用常見的一些錯誤(Xcode9)

FFmpeg的編譯就不說了,網上有很多的shell腳本,可以自己下載一個,根據自己的需求改一改。關于iOS編譯FFmpeg庫的腳本到GitHub上下載。腳本的地址:[https://github.com/kewlbear/FFmpeg-iOS-build-script]

在學習這個庫的時候遇到的Xcode編譯問題 (Xcode9.1)

  • 問題1 因為導入系統庫 Xcode9.1 不是自動幫你連接到項目中的,如果你導入.a庫,在編譯的時候,報如下的錯誤:
Undefined symbols for architecture arm64:
  "_iconv", referenced from:
      _avcodec_decode_subtitle2 in libavcodec.a(decode.o)
  "_iconv_open", referenced from:
      _avcodec_open2 in libavcodec.a(utils.o)
      _avcodec_decode_subtitle2 in libavcodec.a(decode.o)
  "_iconv_close", referenced from:
      _avcodec_open2 in libavcodec.a(utils.o)
      _avcodec_decode_subtitle2 in libavcodec.a(decode.o)
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
錯誤素材1.jpg
解決辦法,下圖所示 ??
素材2.jpg
  • 問題2 當使用av_register_all()函數的時候報了如下的錯誤:
Undefined symbols for architecture arm64:
  "_CMTimeMake", referenced from:
      _vtenc_send_frame in libavcodec.a(videotoolboxenc.o)
  "_kCMTimeInvalid", referenced from:
      _vtenc_send_frame in libavcodec.a(videotoolboxenc.o)
  "_CMSampleBufferGetSampleAttachmentsArray", referenced from:
      _vtenc_frame in libavcodec.a(videotoolboxenc.o)
  "_kCMSampleAttachmentKey_NotSync", referenced from:
      _vtenc_frame in libavcodec.a(videotoolboxenc.o)
  "_CMSampleBufferGetFormatDescription", referenced from:
      _vtenc_frame in libavcodec.a(videotoolboxenc.o)
      _vtenc_output_callback in libavcodec.a(videotoolboxenc.o)
  "_CMBlockBufferCopyDataBytes", referenced from:
      _vtenc_frame in libavcodec.a(videotoolboxenc.o)
  "_CMVideoFormatDescriptionGetH264ParameterSetAtIndex", referenced from:
      _vtenc_frame in libavcodec.a(videotoolboxenc.o)
      _get_params_size in libavcodec.a(videotoolboxenc.o)
      _copy_param_sets in libavcodec.a(videotoolboxenc.o)
  "_CMSampleBufferGetPresentationTimeStamp", referenced from:
      _vtenc_frame in libavcodec.a(videotoolboxenc.o)
  "_CMSampleBufferGetTotalSampleSize", referenced from:
      _vtenc_frame in libavcodec.a(videotoolboxenc.o)
  "_CMBlockBufferCreateWithMemoryBlock", referenced from:
      _videotoolbox_common_end_frame in libavcodec.a(videotoolbox.o)
  "_CMSampleBufferGetDataBuffer", referenced from:
      _vtenc_frame in libavcodec.a(videotoolboxenc.o)
  "_kCMTimeIndefinite", referenced from:
      _vtenc_init in libavcodec.a(videotoolboxenc.o)
      _vtenc_frame in libavcodec.a(videotoolboxenc.o)
      _vtenc_close in libavcodec.a(videotoolboxenc.o)
  "_CMSampleBufferCreate", referenced from:
      _videotoolbox_common_end_frame in libavcodec.a(videotoolbox.o)
  "_kCMFormatDescriptionExtension_SampleDescriptionExtensionAtoms", referenced from:
      _videotoolbox_default_init in libavcodec.a(videotoolbox.o)
  "_CMSampleBufferGetDecodeTimeStamp", referenced from:
      _vtenc_frame in libavcodec.a(videotoolboxenc.o)
  "_CMVideoFormatDescriptionCreate", referenced from:
      _videotoolbox_default_init in libavcodec.a(videotoolbox.o)
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
錯誤素材3.jpg
解決辦法
  • 第一:將報錯信息里面的系統庫 VideoToolbox.framework導入項目中,別忘了手動鏈接(Xcode9 不是自動幫你鏈接的,鏈接方法跟問題1的鏈接方法一樣)
  • 第二:在用到av_register_all()函數地方導入VideoToolbox.framework的頭文件
  • 注意:如果報錯的信息是AudioToolbox... ,那么就需要導入AudioToolbox.framework , 導入#import<AudioToolbox/AudioToolbox.h>
    如下所示??
    素材4.jpg
先記錄這兩個錯誤,之后遇到新的錯誤,繼續追加??
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容