最近升级了系统到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的脚本,请注意黄色的字和注释。


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