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

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 [ "$*" ]
then
	if [ "$*" = "lipo" ]
	then
		# skip compile
		COMPILE=
	else
		ARCHS="$*"
		if [ $# -eq 1 ]
		then
			# skip lipo
			LIPO=
		fi
	fi
fi

if [ "$COMPILE" ]
then
	CWD=`pwd`
	for ARCH in $ARCHS
	do
		echo "building $ARCH..."
		mkdir -p "$SCRATCH/$ARCH"
		cd "$SCRATCH/$ARCH"

		if [ "$ARCH" = "i386" -o "$ARCH" = "x86_64" ]
		then
		    PLATFORM="iPhoneSimulator"
		    if [ "$ARCH" = "x86_64" ]
		    then
		    	SIMULATOR="-mios-simulator-version-min=7.0"
                        HOST=x86_64-apple-darwin
		    else
		    	SIMULATOR="-mios-simulator-version-min=5.0"
                        HOST=i386-apple-darwin
		    fi
		else
		    PLATFORM="iPhoneOS"
		    SIMULATOR=
                    HOST=arm-apple-darwin
		fi

		XCRUN_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]\."
		then
			CFLAGS="$CFLAGS -fembed-bitcode"
		fi
		CXXFLAGS="$CFLAGS"
		LDFLAGS="$CFLAGS"

		CC=$CC $CWD/configure \
		    $CONFIGURE_FLAGS \
                    --host=$HOST \
		    --prefix="$THIN/$ARCH" \
                    CC="$CC" CFLAGS="$CFLAGS" LDFLAGS="$LDFLAGS"

		make -j3 install
		cd $CWD
	done
fi

if [ "$LIPO" ]
then
	echo "building fat binaries..."
	mkdir -p $FAT/lib
	set - $ARCHS
	CWD=`pwd`
	cd $THIN/$1/lib

    for LIB in *.a
	do
		cd $CWD
		lipo -create `find $THIN -name $LIB` -output $FAT/lib/$LIB
	done

	cd $CWD
	cp -rf $THIN/$1/include $FAT


#验证合并的.a 架构
    cd $FAT/lib
    for LIB in *.a
    do
    lipo -info $LIB
    done

#打开合并的.a 所在位置
    open $FAT/lib

fi

最后:执行脚本
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库

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值