1、前提
- iOS编译库需要三个架构,arm64,arm64e,x86_64,其中x86_64为模拟器所需
- iOS编译库需要下载xcode及对应的command line tool(执行命令时可以自动下载),下载失败需要去官网搜索下载
2、openssl
- 参考iOS如何编译OpenSSL静态库(openssl版本:1.1.1b)
- 执行配置命令(路径修改为要生成的目标架构文件夹路径)
./Configure iphoneos-cross --prefix=/Users/xxx/openssl-1.1.1b/openssl_armv7
- 修改makefile以下项目:
-
真机(arm64为例,arm64e修改其中arm64为arm64e一致) # sdk上层路径
CROSS_TOP=/Users/relly/Downloads/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer
sdk文件
CROSS_SDK=iPhoneOS12.1.sdk
CROSS_COMPILE=
CC=/Users/relly/Downloads/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -arch arm64
CXX=
CPPFLAGS=
CFLAGS=-DDSO_DLFCN -DHAVE_DLFCN_H -DNDEBUG -DOPENSSL_THREADS -DOPENSSL_NO_STATIC_ENGINE -DOPENSSL_PIC -DOPENSSLDIR="\"(OPENSSLDIR)\\"" -DENGINESDIR="\\"(ENGINESDIR)\"" -O3 -D_REENTRANT -isysroot (CROSS_TOP)/SDKs/(CROSS_SDK) -fno-common
-
模拟器 # sdk上层路径
CROSS_TOP=/Users/relly/Downloads/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer
sdk文件
CROSS_SDK=iPhoneSimulator12.1.sdk
CROSS_COMPILE=
CC=/Users/relly/Downloads/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -arch x86_64
CXX=
CPPFLAGS=
CFLAGS=-DDSO_DLFCN -DHAVE_DLFCN_H -DNDEBUG -DOPENSSL_THREADS -DOPENSSL_NO_STATIC_ENGINE -DOPENSSL_PIC -DOPENSSLDIR="\"(OPENSSLDIR)\\"" -DENGINESDIR="\\"(ENGINESDIR)\"" -O3 -D_REENTRANT -isysroot (CROSS_TOP)/SDKs/(CROSS_SDK) -fno-common
-
- 执行合并库命令
-
lipo -create ../openssl_arm64/lib/libcrypto.a ../openssl_arm64e/lib/libcrypto.a ../openssl_x86_64/lib/libcrypto.a -output ./libcrypto.a
-
lipo -create ../openssl_arm64/lib/libssl.a ../openssl_arm64e/lib/libssl.a ../openssl_x86_64/lib/libssl.a -output ./libssl.a
-
3、curl
-
修改此脚本中的路径为openssl所编译路径后,赋予执行权限执行即可:
#!/bin/sh
make distclean
CONFIGURE_FLAGS="--disable-shared --disable-frontend"
ARCHS="arm64 arm64e x86_64"
directories
SOURCE是下载的第三方库源码包,解压后的目录,可以把sh脚本放到这个目录,source改为""
SOURCE=""
FAT是所有指令集build后,输出的目录,所有静态库被合并成一个静态库
FAT="fat-libtool"
SCRATCH是下载源码包,解压后的目录
SCRATCH="./"
must be an absolute path
THIN 各自指令集build后输出的静态库所在的目录,每个指令集为一个静态库
THIN=
pwd
/"thin-libtool"COMPILE="y"
LIPO="y"if [ "*" ] then if [ "*" = "lipo" ]
thenskip compile
COMPILE=
else
ARCHS="$*"
if [ $# -eq 1 ]
thenskip lipo
LIPO=
fi
fi
fiif [ "COMPILE" ] then CWD=`pwd` echo "CWD/$SOURCE........."
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
fiXCRUN_SDK=
echo $PLATFORM | tr '[:upper:]' '[:lower:]'
CC="xcrun -sdk $XCRUN_SDK clang -arch ARCH" #AS="CWD/$SOURCE/extras/gas-preprocessor.pl $CC"
CFLAGS="-stdlib=libc++ -static -arch $ARCH SIMULATOR" CXXFLAGS="CFLAGS"
LDFLAGS="$CFLAGS"if [ "$ARCH" = "arm64" ]
then
echo 11
SSL_PATH="--with-openssl=/Users/relly/Lib/IOS/openssl-1.1.1t-modified/build/openssl_arm64"
fiif [ "$ARCH" = "arm64e" ]
then
echo 22
SSL_PATH="--with-openssl=/Users/relly/Lib/IOS/openssl-1.1.1t-modified/build/openssl_arm64e"
fiif [ "$ARCH" = "x86_64" ]
then
echo 33
SSL_PATH="--with-openssl=/Users/relly/Lib/IOS/openssl-1.1.1t-modified/build/openssl_x86_64"
fiecho $SSL_PATH
echo " $ARCH ------------------------- $SSL_PATH"CC=$CC CWD/SOURCE/configure $SSL_PATH --disable-ldap
CONFIGURE_FLAGS \ --host=HOST
--prefix="THIN/ARCH"
CC="CC" CFLAGS="CFLAGS" LDFLAGS="$LDFLAGS"make -j3 install
cd $CWD
done
fiif [ "$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 -createfind $THIN -name $LIB
-output FAT/lib/LIB
donecd $CWD
cp -rf $THIN/$1/include $FAT
fi -
若出现compiler cannot create executables,执行命令指定xcode路径
sudo xcode-select --switch /Users/relly/Downloads/Xcode.app/Contents/Developer/