編譯speex / speexdsp for iOS audiounit邊錄邊播,audioqueue邊錄邊播
阿新 • • 發佈:2019-01-28
參考文章: speex編譯靜態庫for iOS
armv7 引數: -prefix:編譯後內容存放地 -build:在什麼宿主機上面編譯(系統會自動識別,可以省略) -host:交叉編譯產生的專案要放在什麼系統上執行(必填) --enable-static:生成靜態庫 CC="xcrun -sdk iphoneos clang -mios-version-min=8.0 -fembed-bitcode -arch arm64" 使用xcode指定的編譯器,最低版本是8,處理器架構為arm64
--enable-sse
2.也是在make時報錯
2.執行,報錯#include "speex/speex_preprocessor.h" file not found 刪除speex/就可以了,這個錯有很多,耐心改, 3.執行,還報錯,提示有好多的main.o 去libspeexdsp資料夾下面刪除四個測試檔案 4.這下好了,成功執行;
speex部分:
一:官網下載最新的穩定版speex (目前是1.2.0)
二:配置configure檔案
檢視幫助$ ./configure --help
裡面會介紹相應引數的作用
在命令列輸入
arm64
armv7s$ ./configure -prefix=/Users/lj/Desktop/speex-1.2.0/speexlib -host=armv64-apple-darwin --disable-shared --enable-static --disable-float-api --disable-binaries CC="xcrun -sdk iphoneos clang -mios-version-min=8.0 -fembed-bitcode -arch arm64"
$ ./configure -prefix=/Users/lj/Desktop/speex-1.2.0/armv7s -host=armv7s-apple-darwin --disable-shared --enable-static --disable-float-api --disable-binaries CC="xcrun -sdk iphoneos clang -mios-version-min=8.0 -fembed-bitcode -arch armv7s"
armv7 引數: -prefix:編譯後內容存放地 -build:在什麼宿主機上面編譯(系統會自動識別,可以省略) -host:交叉編譯產生的專案要放在什麼系統上執行(必填) --enable-static:生成靜態庫 CC="xcrun -sdk iphoneos clang -mios-version-min=8.0 -fembed-bitcode -arch arm64" 使用xcode指定的編譯器,最低版本是8,處理器架構為arm64
三:編譯
$ make && make install
四:遇到的問題
1.在make命令是很多下面的報錯 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: archive member: .libs/libspeex.a(exc_10_32_table.o) cputype (16777223) does not match previous archive members cputype (16777228) (all members must match) 配置檔案時加上: --disable-debug--disable-asm-optimizationsclang: warning: argument unused during compilation: '-msse' [-Wunused-command-line-argument]
In file included from cb_search.c:39:
In file included from ./vq.h:44:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/9.0.0/include/xmmintrin.h:27:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/9.0.0/include/mmintrin.h:64:12: error: invalid conversion between vector type '__m64'
(vector of 1 'long long' value) and integer type 'int' of different size
return (__m64)__builtin_ia32_vec_init_v2si(__i, 0);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
解決辦法:刪除配置選項--disable-asm-optimizations就好了,我也不明白為什麼
SpeexDSP部分:
一:前序
從1.2rc2版本中,speex就將非壓縮和解壓縮部分放在了SpeexDSP中,從speexz中分離出來了, 打算編譯,結果armv7,armv7s都編譯好了,唯獨arm64編譯不過,因為什麼arm架構處理器擴充套件結構(NEON)的問題一直編譯不過,沒法, 打算擼原始碼了二:準備工作
1.下載SpeexDSP 版本1.2rc3 下載地址:https://www.speex.org/downloads/ 2.從下載包裡面去掉原始碼之外的東西,這個版本下,我就只留下了include和libspeesdsp兩個資料夾三:開擼
1.將檔案拖進工程,編譯報錯:如下之類的地方報錯#ifndef FLOATING_POINT
#error You now need to define either FIXED_POINT or FLOATING_POINT
#endif
#if defined (ARM4_ASM) || defined(ARM5E_ASM) || defined(BFIN_ASM)
#error I suppose you can have a [ARM4/ARM5E/Blackfin] that has float instructions?
#endif
#ifdef FIXED_POINT_DEBUG
#error "Don't you think enabling fixed-point is a good thing to do if you want to debug that?"
#endif
找了好久都沒找到,最後看到一篇相似的文章,
在工程中build-setting->preprocessor macros下修改如下,便能修復這個問題
2.執行,報錯#include "speex/speex_preprocessor.h" file not found 刪除speex/就可以了,這個錯有很多,耐心改, 3.執行,還報錯,提示有好多的main.o 去libspeexdsp資料夾下面刪除四個測試檔案 4.這下好了,成功執行;