编译opencore-amr for iOS

转载自:http://blog.csdn.net/favormm/article/details/6772097

http://blog.csdn.net/favormm/article/details/6804553

 这有个DEMO下载 :http://ios-src-source.googlecode.com/svn/trunk/amrDemoForiOS.zip

amr在传声音中应用较多,因为十多K大小就可以长达一分钟的内容。在ios sdk4.0以后就不再支持这种格式的文件,只有用开源opencore-amr,今天试着编译了一下,结果成功了。

写了一个脚本:

  1. #!/bin/sh  
  2.   
  3. ###########################################################################  
  4. #  Change values here                                                     #  
  5. #                                                                         #  
  6. VERSION="0.1.2"                                                           #  
  7. SDKVERSION="4.2"                                                          #  
  8. #                                                                         #  
  9. ###########################################################################  
  10. #                                                                         #  
  11. # Don't change anything under this line!                                  #  
  12. #                                                                         #  
  13. ###########################################################################  
  14.   
  15. #opencore-amr-0.1.2  
  16.   
  17. CURRENTPATH=`pwd`  
  18.   
  19. mkdir -p "${CURRENTPATH}/src"  
  20. tar zxf opencore-amr-${VERSION}.tar.gz -C "${CURRENTPATH}/src"  
  21. cd "${CURRENTPATH}/src/opencore-amr-${VERSION}"  
  22.   
  23. ############  
  24. # iPhone Simulator  
  25. echo "Building opencore-amr for iPhoneSimulator ${SDKVERSION} i386"  
  26. echo "Please stand by..."  
  27.   
  28. mkdir -p "${CURRENTPATH}/bin/iPhoneSimulator${SDKVERSION}.sdk"  
  29. LOG="${CURRENTPATH}/bin/iPhoneSimulator${SDKVERSION}.sdk/build-openamr-${VERSION}.log"  
  30.   
  31. SDK=/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator${SDKVERSION}.sdk  
  32. export CC ="/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc -arch i386"  
  33. export CXX="/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/g++ -arch i386"  
  34. LDFLAGS="-Wl,-syslibroot,$SDK"   
  35. ./configure --disable-shared --prefix="${CURRENTPATH}/bin/iPhoneSimulator${SDKVERSION}.sdk"  
  36.   
  37. make >> "${LOG}" 2>&1  
  38. make install >> "${LOG}" 2>&1  
  39. make clean >> "${LOG}" 2>&1  
  40. #############  
  41.   
  42. #############  
  43. # iPhoneOS armv6  
  44. echo "Building opencore-amr for iPhoneOS ${SDKVERSION} armv6"  
  45. echo "Please stand by..."  
  46.   
  47. mkdir -p "${CURRENTPATH}/bin/iPhoneOS${SDKVERSION}-armv6.sdk"  
  48. LOG="${CURRENTPATH}/bin/iPhoneOS${SDKVERSION}-armv6.sdk/build-openamr-${VERSION}.log"  
  49.   
  50. SDK=/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS${SDKVERSION}.sdk  
  51. export CC ="/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc -arch armv6 --sysroot=$SDK"  
  52. export CXX="/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/g++ -arch armv6 --sysroot=$SDK"  
  53. LDFLAGS="-Wl,-syslibroot,$SDK"  
  54. ./configure --host=arm-apple-darwin --target=darwin --prefix="${CURRENTPATH}/bin/iPhoneOS${SDKVERSION}-armv6.sdk" --disable-shared  
  55.   
  56. make >> "${LOG}" 2>&1  
  57. make install >> "${LOG}" 2>&1  
  58. make clean >> "${LOG}" 2>&1  
  59. #############  
  60.   
  61. #############  
  62. # iPhoneOS armv7  
  63. echo "Building opencore-amr for iPhoneOS ${SDKVERSION} armv7"  
  64. echo "Please stand by..."  
  65.   
  66. mkdir -p "${CURRENTPATH}/bin/iPhoneOS${SDKVERSION}-armv7.sdk"  
  67. LOG="${CURRENTPATH}/bin/iPhoneOS${SDKVERSION}-armv7.sdk/build-openamr-${VERSION}.log"  
  68.   
  69. SDK=/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS${SDKVERSION}.sdk  
  70. export CC ="/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc -arch armv7 --sysroot=$SDK"  
  71. export CXX="/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/g++ -arch armv7 --sysroot=$SDK"  
  72. LDFLAGS="-Wl,-syslibroot,$SDK"  
  73. ./configure --host=arm-apple-darwin --target=darwin --prefix="${CURRENTPATH}/bin/iPhoneOS${SDKVERSION}-armv7.sdk" --disable-shared   
  74.   
  75. make >> "${LOG}" 2>&1  
  76. make install >> "${LOG}" 2>&1  
  77. make clean >> "${LOG}" 2>&1  
  78. #############  
  79.   
  80.   
  81. echo "Build library..."  
  82. mkdir -p ${CURRENTPATH}/lib  
  83. lipo -create -arch i386 ${CURRENTPATH}/bin/iPhoneSimulator${SDKVERSION}.sdk/lib/libopencore-amrwb.a -arch armv6 ${CURRENTPATH}/bin/iPhoneOS${SDKVERSION}-armv6.sdk/lib/libopencore-amrwb.a -arch armv7 ${CURRENTPATH}/bin/iPhoneOS${SDKVERSION}-armv7.sdk/lib/libopencore-amrwb.a -output ${CURRENTPATH}/lib/libopencore-amrwb.a  
  84.   
  85. lipo -create -arch i386 ${CURRENTPATH}/bin/iPhoneSimulator${SDKVERSION}.sdk/lib/libopencore-amrnb.a -arch armv6 ${CURRENTPATH}/bin/iPhoneOS${SDKVERSION}-armv6.sdk/lib/libopencore-amrnb.a -arch armv7 ${CURRENTPATH}/bin/iPhoneOS${SDKVERSION}-armv7.sdk/lib/libopencore-amrnb.a -output ${CURRENTPATH}/lib/libopencore-amrnb.a  
  86.   
  87.   
  88. mkdir -p ${CURRENTPATH}/include  
  89. cp -R ${CURRENTPATH}/bin/iPhoneSimulator${SDKVERSION}.sdk/include ${CURRENTPATH}/include/  
  90. echo "Building done."  
  91. echo "Cleaning up..."  
  92. rm -rf ${CURRENTPATH}/src  
  93. rm -rf ${CURRENTPATH}/bin  
  94. echo "Done."  


1.将上面脚本内容存入一个.sh文件, 

2. 然后修改为有可运行chmod 777 xxx.sh.  

3. 再将下载下来的opencore-amr.tar.gz与xxx.sh放同一目录,

4. 然后在命令行运行./xxx.sh

这样在目录下就生成一个include与lib文件夹,里面就是你想要的库了。


关于库的使用,我另写了一篇文章介绍,传送门,其过程也遇到了一个小问题,不过最后还是解决了。

这儿有一个demo将amr转成wav


由于xcode4.3以后目录发生了变化,所以上面的script已不正确了。
看到很多人编译都需到问题,我应又花时间研究了一下,其实我也没有在项目中用过,只是兴趣而已。

找了一个新脚本并修改了一下,在xcode4.5.1+ios6进成功编译。支持i386,armv7,armv7s

  1. #!/bin/sh  
  2.   
  3. set -xe  
  4.   
  5. VERSION="0.1.3"                                                           #  
  6. SDKVERSION="6.0"  
  7.   
  8. DEVELOPER=`xcode-select -print-path`  
  9. DEST=${HOME}/opencore-amr-iphone  
  10.   
  11. ARCHS="i386 armv7 armv7s"  
  12. LIBS="libopencore-amrnb.a libopencore-amrwb.a"  
  13.   
  14. for arch in $ARCHS; do  
  15.     case $arch in  
  16.     arm*)  
  17.   
  18.         echo "Building opencore-amr for iPhone $arch ****************"  
  19.         PLATFORM="iPhoneOS"  
  20.         PATH="${DEVELOPER}/Platforms/${PLATFORM}.platform/Developer/usr/bin:$PATH"   
  21.         SDK="${DEVELOPER}/Platforms/${PLATFORM}.platform/Developer/SDKs/${PLATFORM}${SDKVERSION}.sdk"  
  22.         CC="gcc -arch $arch --sysroot=$SDK" CXX="g++ -arch $arch --sysroot=$SDK" \  
  23.         LDFLAGS="-Wl,-syslibroot,$SDK" ./configure \  
  24.         --host=arm-apple-darwin --prefix=$DEST \  
  25.         --disable-shared --enable-gcc-armv5  
  26.         ;;  
  27.     *)  
  28.         PLATFORM="iPhoneSimulator"  
  29.         PATH="${DEVELOPER}/Platforms/${PLATFORM}.platform/Developer/usr/bin:$PATH"  
  30.         SDK="${DEVELOPER}/Platforms/${PLATFORM}.platform/Developer/SDKs/${PLATFORM}${SDKVERSION}.sdk"  
  31.         echo "Building opencore-amr for iPhoneSimulator $arch*****************"  
  32.         CC="gcc -arch $arch" CXX="g++ -arch $arch" \  
  33.         ./configure \  
  34.         --prefix=$DEST \  
  35.         --disable-shared  
  36.         ;;  
  37.     esac  
  38.     make -j3  
  39.     make install  
  40.     make clean  
  41.     for i in $LIBS; do  
  42.         mv $DEST/lib/$i $DEST/lib/$i.$arch  
  43.     done  
  44. done  
  45.   
  46. for i in $LIBS; do  
  47.     input=""  
  48.     for arch in $ARCHS; do  
  49.         input="$input $DEST/lib/$i.$arch"  
  50.     done  
  51.     lipo -create -output $DEST/lib/$i $input  
  52. done  

成生的库与头文件在 ${HOME}目录下

这儿是我编译好的,i386,armv7, armv7s


参考资料:

http://sourceforge.net/mailarchive/forum.php?thread_name=alpine.DEB.2.00.1106152258040.2333%40cone.martin.st&forum_name=opencore-amr-devel

http://sourceforge.net/mailarchive/forum.php?thread_name=alpine.DEB.2.00.1103211053460.3794%40cone.home.martin.st&forum_name=opencore-amr-devel

http://tinsuke.wordpress.com/2011/02/17/how-to-cross-compiling-libraries-for-ios-armv6armv7i386/

http://iosdeveloperzone.com/2012/09/28/tutorial-open-source-on-ios-part-1-build-your-tools/

3
0
查看评论
12楼  oHeiSeHuoYan1 2013-01-21 10:32发表 [回复]
求Xcode4.4支持arm6的库,能发我一下么?,邮箱yao34567@126.com,谢谢 ,Xcode4.5能用,但是我们要求支持ios4.3以下的版本
11楼  zhanzhongyi 2012-12-26 18:20发表 [回复]
xcode 4.5.2 会卡在 "line 32: ./configure: No such file or directory" ?
Re:  夜已深好办事 2012-12-27 18:04发表 [回复]
回复zhanzhongyi:把脚本放到源代码的目录里
Re:  nsm1168 2013-01-07 16:48发表 [回复]
回复favormm:把脚本放到源代码的目录里,仍然一样的问题。
10楼  noticmp 2012-12-15 13:39发表 [回复]
我用下面的方法解决了.
1.请确认等号左右没有空格,如 export CC="/Develop/..."
2.请确认所有的gcc路径,SDK目录都是存在的,如/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc
3.请在需要的地方保证行相连(用左斜杠"\"符号)如 LDFLAGS="-Wl,-syslibroot,$SDK" \ 

最后:如果还是出错,建议把sh脚本的每一个字段含义都搞清楚,这样就能根据出错提示找到问题原因.
Re:  夜已深好办事 2012-12-15 14:30发表 [回复]
回复noticmp:你能分享一下你成功的sh吗,我好更新一下。
9楼  ychexingwuji 2012-12-13 17:30发表 [回复]
请教一下 我编译ios6环境 出现了configure: error: C++ compiler cannot create executables 无法生成.a 文件 是怎么回事呢

另外我想在ffmpeg下 安装这个库 看网上安装需要dylib文件请教下怎么编译.dylib 而不是.a 文件呢
Re:  夜已深好办事 2012-12-14 17:57发表 [回复]
回复ychexingwuji:用新有脚本,你试试,我可以成功编译。
Re:  ychexingwuji 2012-12-15 16:30发表 [回复]
回复favormm:回复favormm:谢谢拉 用了你新写的脚本 自己改了下输出路径,ok了,我是想用编译出的文件,添加到ffmpeg解码库中,ffmpeg编译也通过了,将新编译的.a文件,放入项目中 错误如下:
Undefined symbols for architecture i386:
"_Decoder_Interface_Decode", referenced from:
_amr_nb_decode_frame in libavcodec.a(libopencore-amr.o)
"_Decoder_Interface_exit", referenced from:
_amr_nb_decode_close in libavcodec.a(libopencore-amr.o)
"_Decoder_Interface_init", referenced from:
_amr_nb_decode_init in libavcodec.a(libopencore-amr.o)
"_Encoder_Interface_Encode", referenced from:
_amr_nb_encode_frame in libavcodec.a(libopencore-amr.o)
"_Encoder_Interface_exit", referenced from:
_amr_nb_encode_close in libavcodec.a(libopencore-amr.o)
"_Encoder_Interface_init", referenced from:
_amr_nb_encode_init in libavcodec.a(libopencore-amr.o)
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
========================
我编译的ffmpeg是在模拟器下用的 能帮忙指点下吗 谢谢啦
8楼  knuth 2011-12-21 10:53发表 [回复]
4.3的不行啊, 有个路径没找到:
ld: file not found: /usr/lib/system/libcache.dylib for architecture armv6

不知道有没有知道怎么改啊?
7楼  bigbugbb 2011-11-04 14:26发表 [回复]
和zhutaotao86遇到了同样的问题,楼主发个lib给我吧,谢谢
bobin@qvod.com
Re:  夜已深好办事 2011-11-04 20:54发表 [回复]
回复bigbugbb:http://ios-src-source.googlecode.com/svn/trunk/amrDemoForiOS.zip这儿有个demo下载
6楼  Monokeros 2011-11-01 13:27发表 [回复]
抱歉刚才漏说了一句,我是用您提供的demo xproj测试的。
Re:  夜已深好办事 2011-11-01 22:05发表 [回复]
回复Monokeros:不好意思, 我搞错了,这个测试工程的确的问题,我以为我已更新了网盘上的工程,其实还没有,主要太忙了。你可以参看我另一篇文章http://blog.csdn.net/favormm/article/details/6804553
5楼  Monokeros 2011-11-01 13:26发表 [回复]
您好,感谢您的脚本,我一直在纠结一个iOS/Android跨平台语音的问题,这个对我很有帮助。不过我用模拟器在xCode 4.2 / iOS 5.0中测试好像不太正常,产生的wav文件只有3k体积,没有声音。在applicationDidFinishLaunchingWithOptions中直接调用amrwbToWav也会提示错误而crash掉。不知道有没有其他demo或实例可以参考一下?谢谢!
4楼  abellee87 2011-10-29 12:14发表 [回复]
麻烦也发我一份吧 谢谢
abellee87@gmail.com
还有 我想请问一下 如果用4.3sdk编译的话 ios3.0能用吗?
就是说 如果用4.3sdk编译出来 我做到APP里发布 如果用户是ios3.0的话 也能支持吗?谢谢了~
Re:  夜已深好办事 2011-10-29 19:38发表 [回复]
回复abellee87:就可以吧,因为这个是c/c++的库,所以应没问题
3楼  Mantis1981 2011-09-23 14:40发表 [回复]
能发给我一份吗? tanrui2006@sina.com
Re:  夜已深好办事 2011-09-23 16:57发表 [回复]
回复Mantis1981:已email给你了,请查收,欢迎交交流。
2楼  ke888l3 2011-09-22 16:14发表 [回复]
楼主,同样编译不过,能把你弄好的lib share一下吗
Re:  夜已深好办事 2011-09-23 09:33发表 [回复]
回复ke888l3: 可以,你留下邮箱,我发给你。
Re:  ke888l3 2011-10-01 11:41发表 [回复]
回复favormm:谢谢,bo888chuan AT tom.com
Re:  夜已深好办事 2011-10-01 21:58发表 [回复]
回复ke888l3:已发送到你邮箱了,请查收。
1楼  zhutaotao86 2011-09-22 10:43发表 [回复]
zhutaotao-MacBook-Pro:Desktop user$ ./test.sh
Building opencore-amr for iPhoneSimulator 4.2 i386
Please stand by...
。。。。。。
checking for C++ compiler default output file name... 
configure: error: in `/Users/user/Desktop/src/opencore-amr-0.1.2':
configure: error: C++ compiler cannot create executables
See `config.log' for more details.
Build library...
lipo: can't open input file: /Users/user/Desktop/bin/iPhoneOS4.2-armv6.sdk/lib/libopencore-amrwb.a (No such file or directory)
lipo: can't open input file: /Users/user/Desktop/bin/iPhoneOS4.2-armv6.sdk/lib/libopencore-amrnb.a (No such file or directory)
Building done.
Cleaning up...
Done.

楼主,不可以啊,可以帮忙看下问题吗
Re:  夜已深好办事 2011-09-23 09:35发表 [回复]
回复zhutaotao86:SDKVERSION要设为你自己的sdk版本。要不我直接发lib给你,你留下email吧。
Re:  zhutaotao86 2011-09-23 19:59发表 [回复]
回复favormm:谢谢,zhu.taotao86@gmail.com
Re:  夜已深好办事 2011-10-01 21:58发表 [回复]
回复zhutaotao86:已发送,请注意查收

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值