C/C++ 有很多成熟的库,还有很多特殊功能的库,有时候iOS 平台开发一些比较前沿或者冷门的功能时,iOS并没有提供解决方案,这时候就可以研究C/C++的一些库,为我们使用。但是在Xcode编译C/C++ 源码简直是噩梦,今天就讲一下把下载的C/C++ 库编译成静态.a 这种熟悉的方式调用。

需要提醒的是:要具备一定的脚本知识,以及编译的步骤。不懂得需要花时间去一点点研究。不是一天两天就能理解全部的,自己也在不断的研究中。

目标:

Mac OS X10.14.1 _xcode10.1_ios12.1环境下,编译lame静态库libmp3lame.a,支持arm64 armv7s x86_64 i386 armv7指令集

准备:

  1. 下载 lame 库:http://sourceforge.net/projects/lame/files/lame/3.99/
  2. 下载最新版本lame的解压到一个文件夹里我放到桌面 :例如 lame_cross_build

                                                  (图-1)

脚本:

下载一个脚本: https://github.com/kewlbear/lame-ios-build

脚本下载后解压:得到 build-lame.sh 脚本

将脚本复制到(图-1)lame-3.100 文件夹下

修改脚本内容:

#!/bin/sh# 脚本所在地址
PakagePath=`pwd`
echo "脚本所在地址-----:$PakagePath"cd ..# 包所在地址
BasePath=`pwd`
echo "包所在地址-----:$BasePath"#回到脚本所在地址
cd "$PakagePath"
echo "回到脚本所在地址pwd-----:`pwd` "CONFIGURE_FLAGS="--disable-shared --disable-frontend"ARCHS="arm64 armv7s x86_64 i386 armv7"# directories
# 存放最终的合成的真机、模拟器通用的 .a 的文件夹
FAT=$BasePath/fat-lame
echo "FAT地址-----:$FAT "# 存放脚本执行过程产生的对应不同架构的库文件夹
SCRATCH=$BasePath/scratch-lame# 存放各个架构.a 和 include w
THIN=$BasePath/"thin-lame"COMPILE="y"
LIPO="y"if [ "$*" ]
thenif [ "$*" = "lipo" ]then# skip compileCOMPILE=elseARCHS="$*"if [ $# -eq 1 ]then# skip lipoLIPO=fifi
fiif [ "$COMPILE" ]
thenCWD=`pwd`for ARCH in $ARCHSdoecho "building $ARCH..."mkdir -p "$SCRATCH/$ARCH"cd "$SCRATCH/$ARCH"if [ "$ARCH" = "i386" -o "$ARCH" = "x86_64" ]thenPLATFORM="iPhoneSimulator"if [ "$ARCH" = "x86_64" ]thenSIMULATOR="-mios-simulator-version-min=7.0"HOST=x86_64-apple-darwinelseSIMULATOR="-mios-simulator-version-min=5.0"HOST=i386-apple-darwinfielsePLATFORM="iPhoneOS"SIMULATOR=HOST=arm-apple-darwinfiXCRUN_SDK=`echo $PLATFORM | tr '[:upper:]' '[:lower:]'`CC="xcrun -sdk $XCRUN_SDK clang -arch $ARCH"CFLAGS="-arch $ARCH $SIMULATOR"if ! xcodebuild -version | grep "Xcode [1-6]\."thenCFLAGS="$CFLAGS -fembed-bitcode"fiCXXFLAGS="$CFLAGS"LDFLAGS="$CFLAGS"CC=$CC $CWD/configure \$CONFIGURE_FLAGS \--host=$HOST \--prefix="$THIN/$ARCH" \CC="$CC" CFLAGS="$CFLAGS" LDFLAGS="$LDFLAGS"make -j3 installcd $CWDdone
fiif [ "$LIPO" ]
thenecho "building fat binaries..."mkdir -p $FAT/libset - $ARCHSCWD=`pwd`cd $THIN/$1/libfor LIB in *.adocd $CWDlipo -create `find $THIN -name $LIB` -output $FAT/lib/$LIBdonecd $CWDcp -rf $THIN/$1/include $FAT#验证合并的.a 架构cd $FAT/libfor LIB in *.adolipo -info $LIBdone#打开合并的.a 所在位置open $FAT/libfi

最后:执行脚本

Last login: Thu May  9 16:56:17 on ttys000
lzz-Mac-mini:~ suning$ cd /Users/suning/Desktop/lame_cross_build/lame-3.100
lzz-Mac-mini:lame-3.100 suning$ ./build-lame.sh


看到支持的架构arm64 armv7s x86_64 i386 armv7

感谢:
C++lame库在Mac下编译通用静态库.a库
C++lame库在Mac下编译通用静态库.a库

iOS架构-C/C++lame库在Mac下编译通用静态库.a库(13)相关推荐

  1. linux调用qt生成静态库文件下载,Centos7下编译openssl静态库与QT引用

    1.下载openssl版本:https://www.openssl.org/source/old/ 下载地址 2.我们下载版本为:openssl-1.0.2k 3.拷贝到Linux服务器任意目录 4. ...

  2. mac下Clion与QT引入FFmpeg库

    mac下Clion与QT引入FFmpeg库 目录 ffmpeg路径 Clion引入ffmpeg库 QT引入ffmpeg库 1. ffmpeg路径 /usr/local/Cellar/ffmpeg/4. ...

  3. mac下编译hadoop-3.0.3

    文章目录 1.编译前准备 2. 源码目录下执行 3.编译 5.错误集锦 5.1 Apache Hadoop Pipes编译失败 5.1.2 解决: 5.2 hadoop-client-check-te ...

  4. mac下编译安卓源码

    资源 Mac OS10.12 编译Android源码8.1 aosp编译-需翻墙 Mac下编译安卓源码 手把手教你在Mac OS下载.编译及导入Android源码 步骤 准备 磁盘空间大于180G 安 ...

  5. 在Mac下编译ijkplayer os文件

    在Mac下编译ijkplayer os文件 第一步: 1.安装homebrew ruby -e "$(curl -fsSL https://raw.githubusercontent.com ...

  6. C++ Boost库:windows下编译Boost库

    文章目录 1. 需要编译的boost库 2. 编译步骤 3. 库命名规则 4. VS配置库目录 C++ Boost库:简介和第一个示例程序 C++ Boost库:数值转换 lexical_cast C ...

  7. mac下编译android下libaac,Mac 下编译SOX for android (.a静态库)

    1.下载 sox源码: git clone https://git.code.sf.net/p/sox/code sox-code 3.配置NDK环境变量(如果有不熟悉mac下配置环境变量的请参考Ma ...

  8. Mac 下编译 libmono.so 和 DLL 加密详解

    Unity 打出的安卓包为了防止反编译,需要对 Assembly-CSharp.dll 加密处理.Assembly-CSharp.dll 是由 libmono.so 运行时读取然后在 mono 虚拟机 ...

  9. MinGW下编译ffmpeg静态库给Visual C++使用

    首先推荐 http://ffmpeg.zeranoe.com/builds/, 这里已经有编译好的动态连接库.可惜上面没静态链接库.我也试过 DLL2Lib, 但是无法连接LIBCMT库,只能使用MS ...

最新文章

  1. Jekyll博客统计访问量,阅读量工具总结--LeanCloud,不蒜子,Valine,Google Analytics
  2. MYSQL注入天书之前言
  3. CSS中float属性详解
  4. Python入门教程以及资料免费下载
  5. 对象创建的过程细节是怎样的?一起来探讨内存变化细节
  6. VTK:IO之ReadImageData
  7. xgboost python windows编译问题
  8. PHP以xml形式获取POST数据
  9. windows程序窗体创建流程模型A--利用基本数据类型
  10. pythonkeywordis与 ==的差别
  11. 终于把视频控件写出来了
  12. svn版本回退(CornerStone)
  13. 软件测试项目实战,适合大家练习的实战项目有。
  14. 〖数学算法〗开平方的七种算法
  15. (转)gzip文件格式详解
  16. Unity3d C# 代码动态设置(SetTexture)材质球(Material)贴图纹理(Texture)
  17. 列举5种常见的计算机硬件主要有哪些,计算机硬件组成有哪些
  18. Python脚本批量转换图片格式至ico
  19. 光纤接头的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  20. 【代码超详解】LightOJ 1197 Help Hanzo(区间质数筛法)

热门文章

  1. 报告称中国出境游客移动支付消费首次超现金
  2. 十三种基于直方图的图像全局二值化算法原理、实现、代码及效果(转)
  3. LocalResizeIMG前端HTML5本地压缩图片上传,兼容移动设备IOS,android
  4. 京东商城Android版客户端 安装到手机上就能轻松购物
  5. 推荐 xiaotie 的开源GIS专题文章索引
  6. linux部署MantisBT(三)部署MantisBT
  7. jstack可以定位到线程堆栈
  8. windows平台搭建Mongo数据库复制集(类似集群)(三)
  9. 入门:PHP:hello world!
  10. iOS32位唯一标识符