mac编译iOS版openssl

一、openssl编译结构梳理:

编译openssl ,要先运行configure文件。与普通开源软件不同的是,openssl有多个makefile,makefile ,makefile.bak, makefile.org, makefile.shared。configure要根据平台拷贝对应的makefile。一般情况下,我们需要的是makefile.org。想所以修改openssl的makefile,直接修改已经存在的makefile是无效的,要修改我们需要的org文件。


二、编译时遇到的bug:

多次编译后,运行make install出现错误,提示连接多次。根据提示,我们在point.sh中,找到如下代码:

ln -s "$1" "$2"

在前面检查链接是否存在,如果存在先删除再链接即可。

其实,交叉编译时,doc文件是不需要的,在makefie.org的install选项中,删除doc就好了。


三、编译


脚本:

#!/bin/bash

# This script builds the iOS and Mac openSSL libraries
# Download openssl http://www.openssl.org/source/ and place the tarball next to this script

# Credits:
# https://github.com/st3fan/ios-openssl
# https://github.com/x2on/OpenSSL-for-iPhone/blob/master/build-libssl.sh


set -e

INSTALL_PATH="/tmp/openssl"

usage ()
{
	echo "usage: $0 [minimum iOS SDK version (default 8.2)]"
	exit 127
}

if [ $1 -e "-h" ]; then
	usage
fi

if [ -z $1 ]; then
	SDK_VERSION="8.4"
else
	SDK_VERSION=$1
fi

OPENSSL_VERSION="openssl-1.0.2d"
DEVELOPER=`xcode-select -print-path`
buildMac1()
{
    echo buildMac -----
}

buildMac()
{
	ARCH=$1

	echo "Building ${OPENSSL_VERSION} for ${ARCH}"

	TARGET="darwin-i386-cc"

	if [[ $ARCH == "x86_64" ]]; then
		TARGET="darwin64-x86_64-cc"
	fi

	pushd . > /dev/null
	cd "${OPENSSL_VERSION}"
	./Configure ${TARGET} --openssldir="$INSTALL_PATH/${OPENSSL_VERSION}-${ARCH}"
	make 
	make install
	make clean 
	popd > /dev/null
}

buildIOS1()
{
    echo build-ios-1-----
}
buildIOS()
{
	ARCH=$1

	pushd . > /dev/null
	cd "${OPENSSL_VERSION}"
  
	if [[ "${ARCH}" == "i386" || "${ARCH}" == "x86_64" ]]; then
		PLATFORM="iPhoneSimulator"
	else
		PLATFORM="iPhoneOS"
		sed -ie "s!static volatile sig_atomic_t intr_signal;!static volatile intr_signal;!" "crypto/ui/ui_openssl.c"
	fi
  
	export $PLATFORM
	export CROSS_TOP="${DEVELOPER}/Platforms/${PLATFORM}.platform/Developer"
	export CROSS_SDK="${PLATFORM}${SDK_VERSION}.sdk"
	export BUILD_TOOLS="${DEVELOPER}"
	export CC="${BUILD_TOOLS}/usr/bin/gcc -arch ${ARCH}"
   
	echo "Building ${OPENSSL_VERSION} for ${PLATFORM} ${SDK_VERSION} ${ARCH}"

	if [[ "${ARCH}" == "x86_64" ]]; then
	    echo "Configure darwin64-x86_64-cc"
#		./Configure darwin64-x86_64-cc --openssldir="$INSTALL_PATH/${OPENSSL_VERSION}-iOS-${ARCH}" 
	else
	    echo "Configure iphoneos-cross"
#		./Configure iphoneos-cross --openssldir="$INSTALL_PATH/${OPENSSL_VERSION}-iOS-${ARCH}" 
	fi
	# add -isysroot to CC=
	sed -ie "s!^CFLAG=!CFLAG=-isysroot ${CROSS_TOP}/SDKs/${CROSS_SDK} -miphoneos-version-min=${SDK_VERSION} !" "Makefile"

#	make 
#	make install 
	make clean 
	popd > /dev/null
}

echo "Cleaning up"
rm -rf include/openssl/* lib/*

mkdir -p lib/iOS
mkdir -p lib/Mac
mkdir -p include/openssl/

rm -rf "$INSTALL_PATH/${OPENSSL_VERSION}-*"
rm -rf "$INSTALL_PATH/${OPENSSL_VERSION}-*.log"

function  download_unrar_openssl
{
    if [ ! -e ${OPENSSL_VERSION}.tar.gz ]; then
	  echo "Downloading ${OPENSSL_VERSION}.tar.gz"
	  curl -O https://www.openssl.org/source/${OPENSSL_VERSION}.tar.gz
    else
	  echo "cur version is exit, Using ${OPENSSL_VERSION}.tar.gz"
    fi
    echo "unrar ${OPENSSL_VERSION}.tar.gz"
    tar xfz "${OPENSSL_VERSION}.tar.gz"
}

#rm -rf "${OPENSSL_VERSION}"
if [ ! -d ${OPENSSL_VERSION} ];then
    download_unrar_openssl
fi


echo "check and prepare openssl end"


buildIOS "armv7"
buildIOS "armv7s"
buildIOS "arm64"
buildIOS "x86_64"
buildIOS "i386"

echo "Building iOS libraries"
lipo \
    "$INSTALL_PATH/${OPENSSL_VERSION}-iOS-armv7/lib/libcrypto.a" \
    "$INSTALL_PATH/${OPENSSL_VERSION}-iOS-armv7s/lib/libcrypto.a" \
	"$INSTALL_PATH/${OPENSSL_VERSION}-iOS-arm64/lib/libcrypto.a" \
	"$INSTALL_PATH/${OPENSSL_VERSION}-iOS-i386/lib/libcrypto.a" \
	"$INSTALL_PATH/${OPENSSL_VERSION}-iOS-x86_64/lib/libcrypto.a" \
	-create -output lib/iOS/libcrypto.a

lipo \
    "$INSTALL_PATH/${OPENSSL_VERSION}-iOS-armv7/lib/libssl.a" \
    	"$INSTALL_PATH/${OPENSSL_VERSION}-iOS-armv7s/lib/libssl.a" \
	"$INSTALL_PATH/${OPENSSL_VERSION}-iOS-arm64/lib/libssl.a" \
	"$INSTALL_PATH/${OPENSSL_VERSION}-iOS-i386/lib/libssl.a" \
	"$INSTALL_PATH/${OPENSSL_VERSION}-iOS-x86_64/lib/libssl.a" \
	-create -output lib/iOS/libssl.a

echo "Cleaning up"
rm -rf $INSTALL_PATH/${OPENSSL_VERSION}-*
#rm -rf ${OPENSSL_VERSION}

echo "Done"


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值