iOS模拟器配置下CMake报错Could NOT find OpenSSL的解决求助
解决iOS平台编译OpenSSL依赖的问题
方案一:改用iOS系统自带加密库(推荐)
iOS SDK内置了CommonCrypto框架,原生提供MD5、SHA系列哈希计算API,无需依赖第三方OpenSSL,更符合Apple平台编译规范,还能避免交叉编译的繁琐。
代码修改示例
替换原有OpenSSL相关实现为CommonCrypto封装:
#include <CommonCrypto/CommonDigest.h> namespace crypto { template<size_t N> class BasicHash { /* 保留原有BasicHash的实现逻辑 */ }; template<size_t N, unsigned int (*CCFunc)(const void*, CC_LONG, unsigned char*)> class CommonCryptoHash : public BasicHash<N> { public: static std::array<unsigned char, N> compute(const unsigned char* data, size_t length) { std::array<unsigned char, N> digest{}; CCFunc(data, static_cast<CC_LONG>(length), digest.data()); return digest; } }; using Md5 = CommonCryptoHash<CC_MD5_DIGEST_LENGTH, CC_MD5>; using Sha1 = CommonCryptoHash<CC_SHA1_DIGEST_LENGTH, CC_SHA1>; using Sha256 = CommonCryptoHash<CC_SHA256_DIGEST_LENGTH, CC_SHA256>; using Sha512 = CommonCryptoHash<CC_SHA512_DIGEST_LENGTH, CC_SHA512>; }
CMake配置调整
删除原有的find_package(OpenSSL)语句,针对iOS平台链接系统框架:
if(CMAKE_SYSTEM_NAME STREQUAL "iOS") target_link_libraries(你的目标库/可执行文件 PRIVATE "-framework CommonCrypto") endif()
方案二:交叉编译OpenSSL用于iOS
如果必须依赖OpenSSL,需要编译适配iOS模拟器/真机的专属版本:
1. 编译iOS版本的OpenSSL
- 使用OpenSSL官方交叉编译脚本,或结合
ios-cmake工具,编译支持iOS模拟器(x86_64)和真机(arm64)的通用库 - 编译完成后,将头文件和库文件安装到指定目录,比如
~/openssl-ios
2. 修改CMake配置
在CMake中针对iOS平台指定交叉编译后的OpenSSL路径:
if(CMAKE_SYSTEM_NAME STREQUAL "iOS") # 指定iOS版本OpenSSL的根目录 set(OPENSSL_ROOT_DIR "~/openssl-ios") endif() find_package(OpenSSL REQUIRED Crypto SSL) target_link_libraries(你的目标库/可执行文件 PRIVATE OpenSSL::Crypto OpenSSL::SSL)
也可以在CMake命令行直接传递参数:
cmake ... -DOPENSSL_ROOT_DIR=~/openssl-ios -DOPENSSL_CRYPTO_LIBRARY=~/openssl-ios/lib/libcrypto.a -DOPENSSL_INCLUDE_DIR=~/openssl-ios/include
问题核心原因
你MacOS本地安装的OpenSSL(/opt/local路径下)是针对MacOS架构编译的,而iOS模拟器属于交叉编译环境,CMake默认会在iOS SDK路径内查找依赖,不会调用MacOS本地的库,因此找不到匹配的OpenSSL组件。
内容的提问来源于stack exchange,提问作者Alexey Starinsky
相关产品推荐
相关产品推荐

