Mac下编译openssl库

2023-11-04

1、下载OpenSSL源代码库:

http://www.openssl.org/source/

当前最新版本1.0.2c ,笔者下载的是openssl-1.0.2a 下载后,将其中的 openssl-1.0.2a 目录解压出来放在你Mac机器(虚拟机)合适的地方,比如/Users/xx/oo/OpenSSL/openssl-1.0.2a


2、编译OpenSSL

openssl是一个c语言函数库,为方便在Xcode中使用,我们需要把它编译为静态库。

打开crypto/ui/ui_openssl.c进行编辑。

static volatile sig_atomic_t intr_signal;

 

修改为:

static volatile int intr_signal;

否则会出现一个编译错误。


切换到/Users/xx/oo/OpenSSL目录,在其下建立5个子目录(通过图形界面操作也行,看个人偏好了)

mkdir armv7 armv7s arm64 i386 fat

其中armv7 armv7s arm64 i386这四个目录分别用于存放编译的armv7 armv7s arm64 i386版本的静态库,他们之间的版本区别不必赘述,不懂的可以自行查阅,而fat目录用于存放“通用”静态库,也就是包含armv7 armv7s arm64 i386这四种版本的静态库(合并)


2.1 编译 i386 版本的静态库(供模拟器使用)

命令行进入openssl-1.0.2a目录,执行目录下的congfigure:

./configure BSD-generic32 --openssldir=/Users/xx/oo/OpenSSL/i386

这句话的意思是配置输出目录,openssldir=/Users/xx/oo/OpenSSL/i386目录既是编译的.a存放目录,也就是前面创建的目录(请填写正确的绝对路径)


接下来需要配置编译选项:

找到openssl-1.0.2a目录下的 makefile 文件,使用文本编译工具打开,找到:

CC= gcc

修改为:

CC= /Applications/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/

usr/bin/clang -arch i386

这句话的意思就是指定编译为i386版本,其中/Applications/XCode.app/Contents/Developer/Toolchains/

XcodeDefault.xctoolchain/usr/bin/clang 是约定俗成的,可以理解为Xcode编译脚本,但路径一定要正确,需要根据你实际的Xcode安装路径来指定(如果你不确定,可以通过Mac的终端工具逐层的去查看)

(下一行)在CFLAG = 的-isysroot参数后面改为你的Mac机器当前Xcode使用的SDK路径,比如笔者的SDK路径:

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/

Developer/SDKs/iPhoneOS8.2.sdk

完整的CFLAG选项类似于但不限于如下:

CFLAG= -DOPENSSL_THREADS -pthread -D_THREAD_SAFE -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DTERMIOS -O3 -fomit-frame-pointer -Wall -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/

Developer/SDKs/iPhoneOS8.2.sdk

 

编译选项配置好了,即可进行编译:

make

make install

编译无误且编译完毕之后,检查i386/lib目录下 libcrypto.a 和 libssl.a 是否生成:


2.2 编译 armv7 库(armv7架构的iOS使用)

可以先将编译好的 i386 库保存到另外一个目录下面,以免下面的操作可能会将其清除

清除上次编译的配置:

make clean

 

执行configure,重新生成新的编译配置:

./configure BSD-generic32 --openssldir=/Users/xx/oo/OpenSSL/armv7

 

修改 makefile 文件,将 CC=gcc修改为:

CC= /Applications/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/

usr/bin/clang -arch armv7

同样,需要在CFLAG=-isysroot参数后面改为你的Mac机器当前Xcode使用的SDK路径

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/

Developer/SDKs/iPhoneOS8.2.sdk

注意,这里是iPhoneOS.platform而不是先前的 iPhoneSimulator.platform了。

编译:

make

make install

编译无误且编译完毕之后,检查armv7/lib目录下 libcrypto.a 和 libssl.a 是否生成


2.3 编译 armv7s 库(armv7s 架构的 iOS 使用)

清除前面编译配置:

make clean

 

执行configure配置编译环境:

./configure BSD-generic32 --openssldir=/Users/xx/oo/OpenSSL/armv7s

 

修改 makefile 文件,将 CC=cc修改为:

CC= /Applications/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/

usr/bin/clang -arch armv7s

 

同样,需要在CFLAG=的-isysroot参数后面改为你的Mac机器当前Xcode使用的SDK路径:

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/

Developer/SDKs/iPhoneOS8.2.sdk

 

编译:

make make

install

编译无误且编译完毕之后,检查armv7s/lib目录下 libcrypto.a 和 libssl.a 是否生成:


2.4 编译 armv64 库(armv64 架构的 iOS 使用)

清除前面编译配置:

make clean

 

执行configure配置编译环境:

./configure BSD-generic32 --openssldir=/Users/xx/oo/OpenSSL/arm64

 

修改 makefile 文件,将 CC=cc修改为:

CC= /Applications/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/

usr/bin/clang -arch arm64

 

同样,需要在CFLAG=的-isysroot参数后面改为你的Mac机器当前Xcode使用的SDK路径:

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/

Developer/SDKs/iPhoneOS8.2.sdk

 

编译:

make make

install

编译无误且编译完毕之后,检查arm64/lib目录下 libcrypto.a 和 libssl.a 是否生成。


2.5 制作“通用”静态库

    通用静态库是一个“多架构”文件,它是多个单一架构静态库的融合。

    这么做的目的是为了避免很多不必要的由于版本差异带来的项目属性设置麻烦。比如说你的某一个工程引用了openssl,当编译armv7架构的时候,需要修改Build Settings属性下的Library Search Paths为armv7架构的libcrypto.a/libssl.a所在的目录,并且在Build Phases属性中的Link Binary With Libraries指定armv7架构的libcrypto.a/libssl.a;倘若你要进行模拟器调试呢?亦或编译支持armv7、armv7s、arm64架构的发布程序呢?

因此,为了避免这些由于架构本身带来的属性设置麻烦,制作“通用”静态库是很有必要的,你仅需要对Library Search Paths、Link Binary With Libraries属性设置一遍,而不管你编译任何架构的目标程序,都不会有任何影响!


制作“通用”静态库需要使用 Mac OS X 的 lipo 命令(具体请参考 Mac OS X 手册)。

合并 libcrypto.a 库:

lipo -create i386/lib/libcrypto.a armv7/lib/libcrypto.a armv7s/lib/libcrypto.aarm64/lib/libcrypto.a -output fat/libcrypto.a

以上请操作请注意相关.a文件的路径,笔者默认当前目录就是/Users/xx/oo/OpenSSL 

查看合并后的libcrypto.a静态库信息(使用lipo -info命令):



合并 libssl.a 库略:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mac下编译openssl库 的相关文章

  • UIWebView didFinishLoading 多次触发

    我有一些代码需要在 a 之后运行UIWebView完成加载文档 为此我设置了UIWebView的委托给我的控制器 并实现了webViewDidFinishLoading method 这会被多次调用 具体取决于要加载的页面类型 我不确定是否
  • 我可以在 Mac OS X 上将 enthought python 重新链接到新版本的 openssl 吗?

    今天早上 我在 Mac OS X 10 6 8 上使用 EPD 7 3 时遇到了与 SSL 相关的问题 当我运行 pip 版本 1 3 1 时 我得到 pip install requests Downloading unpacking r
  • Swift 3:将 UIButton 扩展添加到 ViewController

    我是 iOS Swift 的初学者 尝试创建一个没有 Storyboard 的简单应用程序 我创建了一个UIButton扩展名 我想在我的视图中添加一个简单的按钮 稍后将设置约束 不幸的是 该按钮不可见 如果有人帮助我 我将不胜感激 谢谢你
  • 解雇ViewControllerAnimated:完成:在 iOS 8 上

    在 iOS dismissViewControllerAnimated completion 会导致presentedViewController being nil 在 iOS 8 中 presentedViewController仍然指
  • 外围 BLE 设备的唯一标识符

    所以我有外围设备BLE设备 我需要一些标识符以便稍后与另一部 iPhone 共享 我连接的示例iPhone A 为外围设备 iPhone A 将外围设备的标识符保存到数据库中 稍后我可以轻松获取iPhone B 并连接到通过该标识符找到的外
  • 尽管遵循以下说明,PWA iOS Splash 仍不显示

    我正在制作 PWA 并尝试显示闪屏 我正在关注这个教程 https developer apple com library archive documentation AppleApplications Reference SafariWe
  • UICollectionView 项目顺序在从右到左语言中不颠倒

    我注意到一个大问题 在从右到左的语言中 单元格顺序没有正确颠倒 只有对齐是正确的 但仅适用于水平流布局 并且如果集合视图包含不同的细胞大小 是的 我知道这听起来很疯狂 如果所有单元格大小相同 则排序和对齐就很好 这是到目前为止我通过示例应用
  • 如何在 iOS 上的视图之间进行展开/收缩转换?

    我正在尝试在 iOS 中制作过渡动画 其中视图或视图控制器似乎扩展以填充整个屏幕 然后在完成后收缩回原来的位置 我不确定这种类型的转换的正式名称是什么 但您可以在 iPad 版 YouTube 应用中查看示例 当您点击网格上的搜索结果缩略图
  • 平板电脑在第一次单击时悬停,在第二次单击时单击

    发布这个问题主要是希望证实我对该行为的怀疑 从而为其他程序员记录下来 因为我在网上没有找到任何记录 我正在构建一个网站 其导航栏具有以下属性 水平截面是 ul of li 和一些 li li s 两者都有 A n a 元素带您进入该主题 触
  • 如何在文本末尾添加按钮,如 Facebook 的“继续阅读”?

    当状态帖子太长时 Facebook 应用程序会剪切文本并在末尾添加 继续阅读 它如何知道在哪里剪切文本并添加 继续阅读 不仅仅是向 textView 或标签添加按钮 而是如何剪切字符串 例如 在下图中 我将行数限制为 7 我可以在 text
  • 更新到 Xcode 7.0.1,项目现在有问题

    因此 我将 Xcode 6 1 版本上传到 iTunes Connect 并且该应用程序获得了批准 现在我正在尝试更新应用程序 我更新到 Xcode 7 0 1 Xcode 给我带来了问题 指出 对于应用程序 我使用了故事板和 Object
  • 当 iPhone 设备方向朝上/朝下时,我可以判断它是横向还是纵向吗?

    我得到这个代码 如果设备处于左 右横向或上下颠倒状态 它会旋转并显示另一个视图控制器 但如果它的方向朝上或朝下 那么我如何判断它是横向模式还是纵向模式 因为我只想在它面朝上或朝下以及横向模式下旋转 void viewDidAppear BO
  • 取消交互式 UINavigationController 弹出手势不会调用 UINavigationControllerDelegate 方法

    如果拖动 a 的边缘UIViewController开始交互式流行过渡UINavigationController the UIViewController在电流下方有viewWillAppear 调用 然后是UINavigationCon
  • 在 iPhone 和 Cocos2d 中从类类型(+)方法访问对象?

    我有一个类方法 在其中创建并返回类对象 但我想访问同一类中该对象的某些属性 作为一个类方法 我无法在 h 文件中声明该变量 然后在其他方法中访问它 以下是代码 我如何在下面的实例方法中访问 backsprite 或 hudlayer 对象的
  • 使用 iOS 设备作为 TCP 客户端 - 无 Bonjour

    我想使用 iOS 设备作为 TCP 客户端 但我找不到可理解的 API 指南 示例来说明如何做到这一点 我试过SimpleNetworkStreams and PictureSharing 但他们都使用 Bonjour 我可以轻松建立 UD
  • 子视图控制器旋转方法未被调用

    Summary 我试图将子视图控制器添加到父视图控制器 并让父视图控制器通知子视图控制器旋转事件 但是 旋转消息不会转发到子视图控制器 这是默认行为 为什么这种默认行为没有发生 环境 iOS 7 XCode 5 OSX 10 9 Detai
  • iOS:addConstraints:应用程序崩溃

    Problem 我似乎无法在现有项目中采用自动布局 Details 我之前也遇到过与此问题相同的问题presentViewController 在 iOS 但所提供的答案都不是我的解决方案 我正在使用所有没有 xib 的故事板视图 我的 使
  • 即时将图像添加到 AR 资源以进行图像识别

    ARKit1 5介绍图像识别 在代码中 您必须创建一组参考图像 如下所示 let referenceImages ARReferenceImage referenceImages inGroupNamed AR Resources bund
  • iOS 11 getUserMedia 不起作用?

    苹果公司发表声明称getUserMedia将在 iOS 11 上完全正常运行 安装 iOS 11 Beta 版本 5 后 我确实收到一条消息 表明我的网站请求访问我的相机和麦克风 但似乎是这样的 video src window URL c
  • NSURLConnection 是否自动保留从服务器发送的 cookie?

    我从 ios 登录到我的龙卷风后端并发回 secure cookie 我注意到只要验证我设置的 secure cookie 我还可以请求其他信息 NSURLConnection 会保留 cookie 多久 或者关闭应用程序后 cookie

随机推荐

  • 阿里云通义千问向全社会开放,近期将开源更大参数规模大模型

    9月13日 阿里云宣布通义千问大模型已首批通过备案 并正式向公众开放 广大用户可登录通义千问官网体验 企业用户可以通过阿里云调用通义千问API 通义千问在技术创新和行业应用上均位居大模型行业前列 IDC最新的AI大模型评估报告显示 通义千问
  • 【YModem】YModem串口IAP升级例程+YModem串口工具

    目录 YModem协议传输的过程 IAP例程 YModem串口工具 YModem技术手册 手把手教你如何实现自动固件更新 YModem协议是由XModem协议演变而来的 每包数据可以达到1024字节 是一个非常高效的文件传输协议 Ymode
  • ChatGPT多场景应用之基本应用

    人工智能 AI 无疑是近年来最流行和最先进的技术之一 生成式 AI模型正在促进众多任务 实现效率和自动化 目前 ChatGPT是风靡互联网的主要生成人工智能模型 据 Similar Web 称 自 2022 年 11 月发布以来 其访问量已
  • 【c语言五子棋】自定义类型五子棋/井字棋:胜负判断

    一 算法思路 由于五子棋规则比较简单 我们可以胜负判断分为以下几个方面分别判断 1 横向判断 2 竖向判断 3 斜向判断 从左下到右上 4 斜向判断 从左上到右下 二 算法原理 算法来源 参考字符串匹配的处理方法 具体可以参考 从头到尾彻底
  • 腾讯COS,Cloudbase API用法教程详细

    Chinar blog www chinar xin 腾讯云 COS Cloudbase API 本文提供全流程 中文翻译 Chinar 的初衷是将一种简单的生活方式带给世人 使有限时间 具备无限可能 Chinar 心分享 心创新 助力快速
  • 使用GCC和Makefile编译c文件

    Ubuntu下使用GCC和Makefile编译c文件 目录 Ubuntu下使用GCC和Makefile编译c文件 前言 一 GGC命令行模式 1 vim创建文件 2 gcc编译 1 编译出目标文件 2 链接为可执行文件 3 运行 二 VS2
  • 没有苹果开发者账号能否创建ios证书-最新

    在2020年以前 注册苹果开发者账号后 就可以使用香蕉云编生成证书 但2020年后 因为注册苹果开发者账号需要使用Apple Developer app注册开发者账号 所以需要缴费才能创建ios证书了 所以新政策出来后 只能使用香蕉云编 注
  • quill富文本编辑器 自定义字体和大小 以及提交和回显

    第一步 引入quill样式 我是下载到本地了 第二步 引入js
  • 网购平台用户行为分析

    1 背景 对于电子商务网站来说 每天都会产生海量的关于用户的行为数据 分析用户的行为对于企业来说至关重要 从海量用户行为数据中可以挖掘出网购用户的个人喜好 行为特征 购买倾向等隐藏信息 从而为电子商务服务商提供有价值的信息 本文基于SQL从
  • kex_exchange_identification: Connection closed by remote host问题解决

    今天动了一下代码 打算提交到github 结果使用git push 的时候报错 kex exchange identification Connection closed by remote host 在网上找了半天各种方法都试过了 终于找
  • 个人学习日记—CSS字体样式属性调试工具

    font字体 font size 大小 作用 font size属性用于设置字号 p font size 20px 单位 可以使用相对长度单位 也可以使用绝对长度单位 相对长度单位比较常用 推荐使用像素单位px 绝对长度单位使用较少 注意
  • Spring系列之依赖注入---手动注入

    本文内容 主要介绍xml中依赖注入的配置 构造器注入的3种方式详解 set方法注入详解 注入容器中的其他bean的2种方式 其他常见类型注入详解 依赖回顾 通常情况下 系统中类和类之间是有依赖关系的 如果一个类对外提供的功能需要通过调用其他
  • CocosCreator3.8研究笔记(二)windows环境 VS Code 编辑器的配置

    一 设置文件显示和搜索过滤步骤 为了提高搜索效率以及文件列表中隐藏不需要显示的文件 VS Code 需要设置排除目录用于过滤 比如 cocoscreator 中 编辑器运行时会自动生成一些目录 build temp library 所以应该
  • python数据分析处理库-Pandas

    1 读取数据 import pandas food info pandas read csv food info csv print type food info
  • 架构设计核心理念

    文章目录 一 架构设计核心原则 二 架构设计的复杂性 2 1 高性能 2 2 高可用 2 3 可扩展 2 4 低成本 2 5 安全 2 6 规模 一 架构设计核心原则 架构设计的主要目的是为了解决软件系统复杂度带来的问题 架构设计三原则 合
  • Gitolite 构建 Git 服务器

    http www ossxp com doc git gitolite html Gitolite 构建 Git 服务器 Gitolite 构建 Git 服务器 作者 北京群英汇信息技术有限公司 网址 http www ossxp com
  • 解决ElementUI 自定义验证 validate 函数不执行的问题

    span span
  • Spring boot + Spring security 跨域配置

    CORS 简介 为了解决浏览器同源问题 W3C 提出了跨源资源共享 即 CORS Cross Origin Resource Sharing CORS 做到了如下两点 不破坏即有规则 服务器实现了 CORS 接口 就可以跨源通信 Acces
  • kali安装

    kali安装 首先在vm里面新建虚拟机 直接选择典型 然后下一步 然后到了这一步 选择中间的安装程序光盘镜像文件 然后去文件里面找你自己下载的镜像 给虚拟机命名选择安装位置 继续下一步 给虚拟机选择磁盘大小 意思就是说 你虚拟机里面的硬盘要
  • Mac下编译openssl库

    1 下载OpenSSL源代码库 http www openssl org source 当前最新版本1 0 2c 笔者下载的是openssl 1 0 2a 下载后 将其中的 openssl 1 0 2a 目录解压出来放在你Mac机器 虚拟机