# 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} 目录。"
```