# iOS 编译OpenSSL 3.2.5 方法 *** ### 1. 安装依赖 首先,确保你的开发环境已经安装了 Xcode 和 Homebrew。Homebrew 是一个 macOS 的包管理器,可以帮助你安装必要的依赖。 打开终端,运行以下命令来安装 Homebrew(如果你还没有安装的话): ```bash /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" ``` ### 2: 下载 OpenSSL 源代码 访问 OpenSSL 的官方网站或 GitHub 页面下载 OpenSSL 3.2.5 的源代码。你可以使用 wget 或者 curl 命令: ```bash wget https://www.openssl.org/source/openssl-3.2.5.tar.gz curl -L -O https://www.openssl.org/source/openssl-3.2.5.tar.gz ``` 或者,使用浏览器下载后,将文件移动到你的工作目录中。 ### 3: 解压源代码 解压下载的 tar.gz 文件: ```bash tar -xzf openssl-3.2.5.tar.gz cd openssl-3.2.5 ``` ### 4: 配置和编译 OpenSSL 安装完成后可通过以下方式验证: ```bash ./Configure ios64-cross --prefix=/path/to/install #或者 ./Configure ios64-xcrun --prefix=/path/to/install -arch arm64 -isystem $(xcrun --sdk iphoneos --show-sdk-path)/usr/include -I$(xcrun --sdk iphoneos --show-sdk-path)/usr/include -L$(xcrun --sdk iphoneos --show-sdk-path)/usr/lib -isysroot $(xcrun --sdk iphoneos --show-sdk-path) -fembed-bitcode=no -fobjc-arc=no -fobjc-abi-version=2 -std=c99 -miphoneos-version-min=11.0 ``` 这里 /path/to/install 是你想要安装 OpenSSL 的目录。ios64-xcrun 是为 iOS 设备配置的脚本选项。你可以根据需要调整架构(如 armv7, x86_64 等)和 SDK 版本 ### 5: 编译和安装 一旦配置完成,就可以开始编译和安装了: ```bash make clean # 清理之前的编译结果(可选) make # 开始编译 make install # 安装到指定的目录 ``` 编译完成后,你可以在你的 iOS 项目中链接这些库。确保将包含目录和库目录添加到你的 Xcode 项目设置中 ## 这里我提供一个macOSX 下编译脚本 ```bash #!/bin/bash # 定义支持的架构 ARCHS=("arm64" "x86_64") SDK_VERSION="18.4" OPENSSL_VERSION="3.2.5" # OpenSSL 的版本号 OPENSSL_OUTPUT="$(pwd)/iOS" #你想要安装到指定的目录 #在编译的时候我碰到了一些编译问题,例如 fatal error: 'inttypes.h' file not found 是权限问题 使用 sudo ./OpenSSL.ios.sh ## 编译 arm64 版本 #./Configure darwin64-x86_64-cc # 编译 x86_64 版本 #./Configure darwin64-arm64-cc #curl -L -O https://www.openssl.org/source/openssl-3.2.5.tar.gz #curl -L -O https://github.com/openssl/openssl/releases/download/openssl-${OPENSSL_VERSION}/openssl-${OPENSSL_VERSION}.tar.gz # 清理旧文件 rm -rf openssl-${OPENSSL_VERSION} # 解压源码 tar -xzf openssl-${OPENSSL_VERSION}.tar.gz cd openssl-${OPENSSL_VERSION} # 创建输出目录 mkdir -p $OPENSSL_OUTPUT export CC=clang export PATH="/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin:$PATH" # 编译每个架构 for ARCH in ${ARCHS[@]}; do case $ARCH in "arm64") PLATFORM="iPhoneOS" ;; "x86_64") PLATFORM="iPhoneSimulator" ;; esac export CROSS_TOP=/Applications/Xcode.app/Contents/Developer/Platforms/${PLATFORM}.platform/Developer export CROSS_SDK=${PLATFORM}${SDK_VERSION}.sdk ./Configure ios64-cross no-shared no-dso no-hw no-asm --prefix=${OPENSSL_OUTPUT}/${ARCH} make -j$(sysctl -n hw.ncpu) make install make clean done # 合并静态库 #lipo -create ${OPENSSL_OUTPUT}/arm64/lib/libssl.a ${OPENSSL_OUTPUT}/x86_64/lib/libssl.a -output ../../lib/iOS/libssl.a #lipo -create ${OPENSSL_OUTPUT}/arm64/lib/libcrypto.a ${OPENSSL_OUTPUT}/x86_64/lib/libcrypto.a -output ../../lib/iOS/libcrypto.a echo "编译完成!静态库已生成到 ${OPENSSL_OUTPUT} 目录。" ```