转载自: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,今天试着编译了一下,结果成功了。
写了一个脚本:
- #!/bin/sh
- ###########################################################################
- # Change values here #
- # #
- VERSION="0.1.2" #
- SDKVERSION="4.2" #
- # #
- ###########################################################################
- # #
- # Don't change anything under this line! #
- # #
- ###########################################################################
- #opencore-amr-0.1.2
- CURRENTPATH=`pwd`
- mkdir -p "${CURRENTPATH}/src"
- tar zxf opencore-amr-${VERSION}.tar.gz -C "${CURRENTPATH}/src"
- cd "${CURRENTPATH}/src/opencore-amr-${VERSION}"
- ############
- # iPhone Simulator
- echo "Building opencore-amr for iPhoneSimulator ${SDKVERSION} i386"
- echo "Please stand by..."
- mkdir -p "${CURRENTPATH}/bin/iPhoneSimulator${SDKVERSION}.sdk"
- LOG="${CURRENTPATH}/bin/iPhoneSimulator${SDKVERSION}.sdk/build-openamr-${VERSION}.log"
- SDK=/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator${SDKVERSION}.sdk
- export CC ="/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc -arch i386"
- export CXX="/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/g++ -arch i386"
- LDFLAGS="-Wl,-syslibroot,$SDK"
- ./configure --disable-shared --prefix="${CURRENTPATH}/bin/iPhoneSimulator${SDKVERSION}.sdk"
- make >> "${LOG}" 2>&1
- make install >> "${LOG}" 2>&1
- make clean >> "${LOG}" 2>&1
- #############
- #############
- # iPhoneOS armv6
- echo "Building opencore-amr for iPhoneOS ${SDKVERSION} armv6"
- echo "Please stand by..."
- mkdir -p "${CURRENTPATH}/bin/iPhoneOS${SDKVERSION}-armv6.sdk"
- LOG="${CURRENTPATH}/bin/iPhoneOS${SDKVERSION}-armv6.sdk/build-openamr-${VERSION}.log"
- SDK=/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS${SDKVERSION}.sdk
- export CC ="/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc -arch armv6 --sysroot=$SDK"
- export CXX="/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/g++ -arch armv6 --sysroot=$SDK"
- LDFLAGS="-Wl,-syslibroot,$SDK"
- ./configure --host=arm-apple-darwin --target=darwin --prefix="${CURRENTPATH}/bin/iPhoneOS${SDKVERSION}-armv6.sdk" --disable-shared
- make >> "${LOG}" 2>&1
- make install >> "${LOG}" 2>&1
- make clean >> "${LOG}" 2>&1
- #############
- #############
- # iPhoneOS armv7
- echo "Building opencore-amr for iPhoneOS ${SDKVERSION} armv7"
- echo "Please stand by..."
- mkdir -p "${CURRENTPATH}/bin/iPhoneOS${SDKVERSION}-armv7.sdk"
- LOG="${CURRENTPATH}/bin/iPhoneOS${SDKVERSION}-armv7.sdk/build-openamr-${VERSION}.log"
- SDK=/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS${SDKVERSION}.sdk
- export CC ="/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc -arch armv7 --sysroot=$SDK"
- export CXX="/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/g++ -arch armv7 --sysroot=$SDK"
- LDFLAGS="-Wl,-syslibroot,$SDK"
- ./configure --host=arm-apple-darwin --target=darwin --prefix="${CURRENTPATH}/bin/iPhoneOS${SDKVERSION}-armv7.sdk" --disable-shared
- make >> "${LOG}" 2>&1
- make install >> "${LOG}" 2>&1
- make clean >> "${LOG}" 2>&1
- #############
- echo "Build library..."
- mkdir -p ${CURRENTPATH}/lib
- 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
- 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
- mkdir -p ${CURRENTPATH}/include
- cp -R ${CURRENTPATH}/bin/iPhoneSimulator${SDKVERSION}.sdk/include ${CURRENTPATH}/include/
- echo "Building done."
- echo "Cleaning up..."
- rm -rf ${CURRENTPATH}/src
- rm -rf ${CURRENTPATH}/bin
- 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
- #!/bin/sh
- set -xe
- VERSION="0.1.3" #
- SDKVERSION="6.0"
- DEVELOPER=`xcode-select -print-path`
- DEST=${HOME}/opencore-amr-iphone
- ARCHS="i386 armv7 armv7s"
- LIBS="libopencore-amrnb.a libopencore-amrwb.a"
- for arch in $ARCHS; do
- case $arch in
- arm*)
- echo "Building opencore-amr for iPhone $arch ****************"
- PLATFORM="iPhoneOS"
- PATH="${DEVELOPER}/Platforms/${PLATFORM}.platform/Developer/usr/bin:$PATH"
- SDK="${DEVELOPER}/Platforms/${PLATFORM}.platform/Developer/SDKs/${PLATFORM}${SDKVERSION}.sdk"
- CC="gcc -arch $arch --sysroot=$SDK" CXX="g++ -arch $arch --sysroot=$SDK" \
- LDFLAGS="-Wl,-syslibroot,$SDK" ./configure \
- --host=arm-apple-darwin --prefix=$DEST \
- --disable-shared --enable-gcc-armv5
- ;;
- *)
- PLATFORM="iPhoneSimulator"
- PATH="${DEVELOPER}/Platforms/${PLATFORM}.platform/Developer/usr/bin:$PATH"
- SDK="${DEVELOPER}/Platforms/${PLATFORM}.platform/Developer/SDKs/${PLATFORM}${SDKVERSION}.sdk"
- echo "Building opencore-amr for iPhoneSimulator $arch*****************"
- CC="gcc -arch $arch" CXX="g++ -arch $arch" \
- ./configure \
- --prefix=$DEST \
- --disable-shared
- ;;
- esac
- make -j3
- make install
- make clean
- for i in $LIBS; do
- mv $DEST/lib/$i $DEST/lib/$i.$arch
- done
- done
- for i in $LIBS; do
- input=""
- for arch in $ARCHS; do
- input="$input $DEST/lib/$i.$arch"
- done
- lipo -create -output $DEST/lib/$i $input
- done
成生的库与头文件在 ${HOME}目录下
这儿是我编译好的,i386,armv7, armv7s
参考资料:
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/
- 上一篇:Three20中导航时传参通用方法
- 下一篇:编程开启iOS emoji
-
顶
- 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" ?
-
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一下吗
-
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:已发送,请注意查收
-
-
-