编译IOS下Opus音频库
今天说一下为IOS编译Opus音频库遇到的坑。
首先要编译IOS的库,得找一个mac环境,并且下载了XCode,Linux或者Windows下未试过,暂时不知道怎么操作。
其次IOS需要的库比较特殊,它需要的是一个集大成者,意思是这个库中需要保护多个平台架构的各种库,比如i386 x86_64 armv7 armv7s arm64等等,即编译各个平台下的库,然后用苹果自带的lipo命令将之合成。
最后将合成的库放到IOS下使用即可了。
下面提供一个比较暴力的脚本,集下载,编译,合成于一体,如果那里有失败的请自行修改。通过该脚本编译出的库在朋友的IOS APP中正常使用。
脚本默认编译1.2.1版本的opus库。
#!/bin/bashVERSION="1.2.1"
SDKVERSION="11.1"
MINIOSVERSION="8.0"# by default, we won't build for debugging purposes
if [ "${DEBUG}" == "true" ]; thenecho "Compiling for debugging ..."OPT_CFLAGS="-O3 -fno-inline -g"OPT_LDFLAGS=""OPT_CONFIG_ARGS="--enable-assertions --disable-asm"
elseOPT_CFLAGS="-Ofast -flto -g"OPT_LDFLAGS="-flto"OPT_CONFIG_ARGS=""
fi# No need to change this since xcode build will only compile in the
# necessary bits from the libraries we create
ARCHS="i386 x86_64 armv7 armv7s arm64"DEVELOPER=`xcode-select -print-path`
#DEVELOPER="/Applications/Xcode.app/Contents/Developer"#cd "`dirname \"$0\"`"
REPOROOT=$(pwd)# Where we'll end up storing things in the end
OUTPUTDIR="${REPOROOT}/dependencies"
mkdir -p ${OUTPUTDIR}/include
mkdir -p ${OUTPUTDIR}/libBUILDDIR="${REPOROOT}/build"# where we will keep our sources and build from.
SRCDIR="${BUILDDIR}/src"
mkdir -p $SRCDIR
# where we will store intermediary builds
INTERDIR="${BUILDDIR}/built"
mkdir -p $INTERDIR########################################cd $SRCDIR# Exit the script if an error happens
set -eif [ ! -e "${SRCDIR}/opus-${VERSION}.tar.gz" ]; thenecho "Downloading opus-${VERSION}.tar.gz"curl -LO http://downloads.xiph.org/releases/opus/opus-${VERSION}.tar.gz
fi
echo "Using opus-${VERSION}.tar.gz"tar zxf opus-${VERSION}.tar.gz -C $SRCDIR
cd "${SRCDIR}/opus-${VERSION}"set +e # don't bail out of bash script if ccache doesn't exist
CCACHE=`which ccache`
if [ $? == "0" ]; thenecho "Building with ccache: $CCACHE"CCACHE="${CCACHE} "
elseecho "Building without ccache"CCACHE=""
fi
set -e # back to regular "bail out on error" modeexport ORIGINALPATH=$PATHfor ARCH in ${ARCHS}
doif [ "${ARCH}" == "i386" ] || [ "${ARCH}" == "x86_64" ]; thenPLATFORM="iPhoneSimulator"EXTRA_CFLAGS="-arch ${ARCH}"EXTRA_CONFIG="--host=x86_64-apple-darwin"elsePLATFORM="iPhoneOS"EXTRA_CFLAGS="-arch ${ARCH}"EXTRA_CONFIG="--host=arm-apple-darwin"fimkdir -p "${INTERDIR}/${PLATFORM}${SDKVERSION}-${ARCH}.sdk"./configure --enable-float-approx --disable-shared --enable-static --with-pic --disable-extra-programs --disable-doc ${EXTRA_CONFIG} \--prefix="${INTERDIR}/${PLATFORM}${SDKVERSION}-${ARCH}.sdk" \LDFLAGS="$LDFLAGS ${OPT_LDFLAGS} -fPIE -miphoneos-version-min=${MINIOSVERSION} -L${OUTPUTDIR}/lib" \CFLAGS="$CFLAGS ${EXTRA_CFLAGS} ${OPT_CFLAGS} -fPIE -miphoneos-version-min=${MINIOSVERSION} -I${OUTPUTDIR}/include -isysroot ${DEVELOPER}/Platforms/${PLATFORM}.platform/Developer/SDKs/${PLATFORM}${SDKVERSION}.sdk" \# Build the application and install it to the fake SDK intermediary dir# we have set up. Make sure to clean up afterward because we will re-use# this source tree to cross-compile other targets.make -j4make installmake clean
done########################################echo "Build library..."# These are the libs that comprise libopus.
OUTPUT_LIBS="libopus.a"
for OUTPUT_LIB in ${OUTPUT_LIBS}; doINPUT_LIBS=""for ARCH in ${ARCHS}; doif [ "${ARCH}" == "i386" ] || [ "${ARCH}" == "x86_64" ];thenPLATFORM="iPhoneSimulator"elsePLATFORM="iPhoneOS"fiINPUT_ARCH_LIB="${INTERDIR}/${PLATFORM}${SDKVERSION}-${ARCH}.sdk/lib/${OUTPUT_LIB}"if [ -e $INPUT_ARCH_LIB ]; thenINPUT_LIBS="${INPUT_LIBS} ${INPUT_ARCH_LIB}"fidone# Combine the three architectures into a universal library.if [ -n "$INPUT_LIBS" ]; thenlipo -create $INPUT_LIBS \-output "${OUTPUTDIR}/lib/${OUTPUT_LIB}"elseecho "$OUTPUT_LIB does not exist, skipping (are the dependencies installed?)"fi
donefor ARCH in ${ARCHS}; doif [ "${ARCH}" == "i386" ] || [ "${ARCH}" == "x86_64" ];thenPLATFORM="iPhoneSimulator"elsePLATFORM="iPhoneOS"ficp -R ${INTERDIR}/${PLATFORM}${SDKVERSION}-${ARCH}.sdk/include/* ${OUTPUTDIR}/include/if [ $? == "0" ]; then# We only need to copy the headers over once. (So break out of forloop# once we get first success.)breakfi
done####################echo "Building done."
echo "Cleaning up..."
rm -fr ${INTERDIR}
rm -fr "${SRCDIR}/opus-${VERSION}"
echo "Done."
编译IOS下Opus音频库相关推荐
- 交叉工具编译ARM平台Opus音频库
最近项目中使用到opus音频库,这是一款开源的高效的音频库.其优点相对于AAC编码来说,编码效率高,据说相同带宽下,音频质量完爆AAC,而高带宽下音质接近原始音频(不喜勿喷^_^).详情及源码见官网h ...
- TensorFlow自带例子已经包含了android和ios下的摄像头图像分类示例Inception v1,这里补充一个Windows下的,使用AForge库(www.aforgenet.com)操作
TensorFlow自带例子已经包含了android和ios下的摄像头图像分类示例Inception v1,这里补充一个Windows下的,使用AForge库(www.aforgenet.com)操作 ...
- 编译-POCO C++支持iOS平台的静态库
一.POCO C++ library简介 POCO C++ library是一个C++编写的跨平台库,主要实现网络连接.数据库管理以及服务器,适用于跨平台.嵌入式. 二.为Xcode编译POCO C+ ...
- 在Android中使用Opus 1.3.1(Ndk编译使用Opus so库)
Android中使用Opus 1.3.1 Opus是一个开放格式的有损声音编码的格式,并在其使用上没有任何专利或限制.还可以处理各种音频应用,包括IP语音.视频会议.游戏内聊天.流音乐.甚至远程现场音 ...
- 移植Opus音频编解码库到FreeScale iMX6q(飞凌嵌入式的OKMX6Q-C开发板)平台
移植Opus音频编解码库到FreeScale iMX6q(飞凌嵌入式的OKMX6Q-C开发板)平台 交叉编译器 使用飞凌提供的最新版交叉编译工具链,fsl-imx-x11-glibc-x86_64-m ...
- 编译高性能linux so库,关于如何在linux环境下生成a库和so库(改,附图)-Go语言中文社区...
一般linux环境下的链接库分为a库和so库,分别表示静态链接库和动态链接库,其作用是把C程序编译好做成一种可执行链接文件,c主程序文件调用这些程序的函数接口是可以使用a库或so库,在主程序中只需要i ...
- linux下交叉编译libusb的方法及编译一个使用了libusb库的test程序的方法
linux交叉编译libusb的方法 下载libusb 下载网址:libusb - Browse Files at SourceForge.net 交叉编译libusb 将下载好的libusb压缩包解 ...
- python安装第三方库win10_音频处理 windows10下python三方库librosa安装教程
librosa是处理音频库里的opencv,使用python脚本研究音频,先安装三方库librosa. 如下通过清华镜像源安装librosa: pip install -i https://pypi. ...
- win10环境下VTK7.1的编译和Qt调用VTK的详细教程二(VS2013编译支持Qt的VTK库)
本文主要用于编译支持Qt的VTK库,重点在于编译VTK库,供Qt调用. 第1步:新建一个文件夹:vtkDir 第2步:在该文件夹下新建两个文件夹vtk_bin.vtk_src 第3步:将下载好的VTK ...
最新文章
- SAP PM 初级系列9 - 定义功能位置的安装
- ESP-12F模块转接板测试版调试说明,下载MicroPython程序。ESP8266-12F
- C++之全局对象、局部对象、静态对象详解
- FreeType, FFmpeg, SDL, 图像处理软件, Mac OS X, Objective-C
- 2.1php标签,语法,注释
- splitpane如何设置竖条的宽度_页面中有间隔的方格布局如何完美实现?
- (摘录)sockaddr与sockaddr_in,sockaddr_un结构体详细讲解
- .NET、C#和ASP.NET三者之间的区别与联系
- win7和xp无线共享网络问题
- SQL结构化数据查询语言培训讲义
- R语言系列:分布一致性和离散一致性检验
- 世界第4疯狂的科学家,在103岁生日那天去世了
- python手撕链表_图解_leetcode707_设计链表
- 领克无线carplay适配方案展示
- TCP的乱序和丢包判断(附Reordering更新算法)-实例case
- 数据结构之2-3-4树与2-3树
- 自媒体人必不可少的多平台同步、一文多发小助手
- 线上java程序CPU占用过高问题排查
- PPT封面设计的一些心得
- 微型计算机拆的步骤视频,微型计算机拆卸.ppt