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

来源:互联网 发布:mac结束进程快捷键 编辑:程序博客网 时间:2024/06/04 18:50

最近升级了系统到Mac OS X 10.10 并且更新了XCode6.1和iOS 8.1

之前app用到的libmp3lame.a静态库,也要支持64位的模拟器(x86_64)和64位的真机(arm64)指令集。需要重新编译

查阅了下资料,按照如下步骤,并做了些注释和改动

1.http://sourceforge.net/projects/lame/files/lame/3.99/ 下载lame的最新版本解压到一个文件夹里例如 lame,全路径如下/Users/8wm/Desktop/lame


2.下载build的脚本,我这里使用的是国外一个朋友的分享

https://github.com/kewlbear/lame-ios-build

下载之后得到lame-build.sh拷贝到文件夹/Users/8wm/Desktop/lame


3.用bbedit或者其他编辑器打开这个脚本,按照注释修改


4.打开Terminals,

输入

cd /Users/8wm/Desktop/lame

chmod 777 lame-build.sh

sudo -s#

输入系统密码

./lame-build.sh

开始编译,编译完成之后。生成fat-lame目录和thin-lame目录,分别存放合并所有指令集的静态库,以及各指令集的静态库.

根据所需,copy lame.h和libmp3lame.a文件project里,就可以正常使用了。

可以使用命令行,查看换个库支持的指令集。

lipo -info libmp3lame.a

Architectures in the fat file: libmp3lame.a are: armv7 armv7s i386 x86_64 arm64

以下是build的脚本,请注意黄色的字和注释。


[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. #!/bin/sh  
  2.   
  3. make distclean  
  4.   
  5. CONFIGURE_FLAGS="--disable-shared --disable-frontend"  
  6.   
  7. ARCHS="arm64 armv7s x86_64 i386 armv7"  
  8.   
  9. # directories  
  10. # SOURCE是下载lame源码包,解压后的目录,可以把sh脚本放到这个目录,source改为""  
  11. SOURCE=""  
  12. # FAT是所有指令集build后,输出的目录,所有静态库被合并成一个静态库  
  13. FAT="fat-lame"  
  14.   
  15. # SCRATCH是下载lame源码包,解压后的目录,必须是绝对路径  
  16. SCRATCH="/Users/8wm/Desktop/lame"  
  17. # must be an absolute path  
  18. # THIN 各自指令集build后输出的静态库所在的目录,每个指令集为一个静态库  
  19. THIN=`pwd`/"thin-lame"  
  20.   
  21. COMPILE="y"  
  22. LIPO="y"  
  23.   
  24. if [ "$*" ]  
  25. then  
  26.     if [ "$*" = "lipo" ]  
  27.     then  
  28.         # skip compile  
  29.         COMPILE=  
  30.     else  
  31.         ARCHS="$*"  
  32.         if [ $# -eq 1 ]  
  33.         then  
  34.             # skip lipo  
  35.             LIPO=  
  36.         fi  
  37.     fi  
  38. fi  
  39.   
  40. if [ "$COMPILE" ]  
  41. then  
  42.     CWD=`pwd`  
  43.     echo "$CWD/$SOURCE........."  
  44.     for ARCH in $ARCHS  
  45.     do  
  46.         echo "building $ARCH..."  
  47.         mkdir -p "$SCRATCH/$ARCH"  
  48.         cd "$SCRATCH/$ARCH"  
  49.   
  50.         if [ "$ARCH" = "i386" -o "$ARCH" = "x86_64" ]  
  51.         then  
  52.             PLATFORM="iPhoneSimulator"  
  53.             if [ "$ARCH" = "x86_64" ]  
  54.             then  
  55.                 SIMULATOR="-mios-simulator-version-min=7.0"  
  56.                         HOST=x86_64-apple-darwin  
  57.             else  
  58.                 SIMULATOR="-mios-simulator-version-min=5.0"  
  59.                         HOST=i386-apple-darwin  
  60.             fi  
  61.         else  
  62.             PLATFORM="iPhoneOS"  
  63.             SIMULATOR=  
  64.                     HOST=arm-apple-darwin  
  65.         fi  
  66.   
  67.         XCRUN_SDK=`echo $PLATFORM | tr '[:upper:]' '[:lower:]'`  
  68.         CC="xcrun -sdk $XCRUN_SDK clang -arch $ARCH"  
  69.         #AS="$CWD/$SOURCE/extras/gas-preprocessor.pl $CC"  
  70.         CFLAGS="-arch $ARCH $SIMULATOR"  
  71.         CXXFLAGS="$CFLAGS"  
  72.         LDFLAGS="$CFLAGS"  
  73.   
  74.         CC=$CC $CWD/$SOURCE/configure \  
  75.             $CONFIGURE_FLAGS \  
  76.                     --host=$HOST \  
  77.             --prefix="$THIN/$ARCH" \  
  78.                     CC="$CC" CFLAGS="$CFLAGS" LDFLAGS="$LDFLAGS"  
  79.   
  80.         make -j3 install  
  81.         cd $CWD  
  82.     done  
  83. fi  
  84.   
  85. if [ "$LIPO" ]  
  86. then  
  87.     echo "building fat binaries..."  
  88.     mkdir -p $FAT/lib  
  89.     set - $ARCHS  
  90.     CWD=`pwd`  
  91.     cd $THIN/$1/lib  
  92.     for LIB in *.a  
  93.     do  
  94.         cd $CWD  
  95.         lipo -create `find $THIN -name $LIB` -output $FAT/lib/$LIB  
  96.     done  
  97.   
  98.     cd $CWD  
  99.     cp -rf $THIN/$1/include $FAT  
  100. fi  
0 0
原创粉丝点击