iOS 开发-编译第三方库 openssl及curl

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以下项目:
    1. 真机(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

    2. 模拟器

      # 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

  • 执行合并库命令
    1. lipo -create ../openssl_arm64/lib/libcrypto.a ../openssl_arm64e/lib/libcrypto.a ../openssl_x86_64/lib/libcrypto.a -output ./libcrypto.a

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

if [ "$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
fi

XCRUN_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"
fi

if [ "$ARCH" = "arm64e" ]
then
echo 22
SSL_PATH="--with-openssl=/Users/relly/Lib/IOS/openssl-1.1.1t-modified/build/openssl_arm64e"
fi

if [ "$ARCH" = "x86_64" ]
then
echo 33
SSL_PATH="--with-openssl=/Users/relly/Lib/IOS/openssl-1.1.1t-modified/build/openssl_x86_64"
fi

echo $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
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
fi

  • 若出现compiler cannot create executables,执行命令指定xcode路径
    sudo xcode-select --switch /Users/relly/Downloads/Xcode.app/Contents/Developer/
    (/Users/relly/Downloads/Xcode.app/Contents/Developer/路径中用户名替换为你自己的)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值