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

1、前提

  • iOS编译库需要三个架构,arm64,arm64e,x86_64,其中x86_64为模拟器所需
  • iOS编译库需要下载xcode及对应的command line tool(执行命令时可以自动下载),下载失败需要去官网搜索下载

2、openssl

复制代码
  ./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/

相关推荐
Mr_zheng1 小时前
iOS 26 UIKit和Swift上的更新
ios·swift
YungFan1 小时前
iOS26适配指南之UISearchController
ios·swift
陈彬技术实践2 小时前
从 Auto Layout 原理看:为什么 UITableView.tableHeaderView 无法自动撑开?
ios
2501_915909069 小时前
tcpdump 抓包数据分析实战,命令、过滤、常见故障定位与真机补充流程
网络·测试工具·ios·小程序·uni-app·iphone·tcpdump
Digitally12 小时前
如何将iPhone上的HEIF图像下载到电脑
ios·iphone
书弋江山13 小时前
iOS一直讲的单元格优化
macos·ios·cocoa
00后程序员张16 小时前
tcpdump 抓包分析,命令、过滤技巧、常见症状定位与移动真机补充方案
网络·测试工具·ios·小程序·uni-app·iphone·tcpdump
2501_9293826516 小时前
iphone IOS3~IOS9游戏 旧iphone 单机游戏合集分享
游戏·ios·iphone
2501_915921431 天前
iOS 26 电耗监测与优化,耗电问题实战 + 多工具 辅助策略
android·macos·ios·小程序·uni-app·cocoa·iphone
2501_915921431 天前
苹果软件混淆与 iOS 应用加固白皮书,IPA 文件加密、反编译防护与无源码混淆方案全解析
android·ios·小程序·https·uni-app·iphone·webview