iOS 开发-编译第三方库 openssl及curl
1、前提
- iOS编译库需要三个架构,arm64,arm64e,x86_64,其中x86_64为模拟器所需
- iOS编译库需要下载xcode及对应的command line tool(执行命令时可以自动下载),下载失败需要去官网搜索下载
2、openssl
- 参考iOS如何编译OpenSSL静态库(openssl版本:1.1.1b)
- 执行配置命令(路径修改为要生成的目标架构文件夹路径)
-
./Configure iphoneos-cross --prefix=/Users/xxx/openssl-1.1.1b/openssl_armv7 - 修改makefile以下项目:
- 真机(arm64为例,arm64e修改其中arm64为arm64e一致)
# sdk上层路径
CROSS_TOP=/Users/relly/Downloads/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer
# sdk文件
CROSS_SDK=iPhoneOS12.1.sdkCROSS_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 - 模拟器
# sdk上层路径
CROSS_TOP=/Users/relly/Downloads/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer
# sdk文件
CROSS_SDK=iPhoneSimulator12.1.sdkCROSS_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
- 真机(arm64为例,arm64e修改其中arm64为arm64e一致)
- 执行合并库命令
-
lipo -create ../openssl_arm64/lib/libcrypto.a ../openssl_arm64e/lib/libcrypto.a ../openssl_x86_64/lib/libcrypto.a -output ./libcrypto.a
-
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/shmake distcleanCONFIGURE_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
fiif [ "$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
fiXCRUN_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"
fiif [ "$ARCH" = "arm64e" ]
then
echo 22
SSL_PATH="--with-openssl=/Users/relly/Lib/IOS/openssl-1.1.1t-modified/build/openssl_arm64e"
fiif [ "$ARCH" = "x86_64" ]
then
echo 33
SSL_PATH="--with-openssl=/Users/relly/Lib/IOS/openssl-1.1.1t-modified/build/openssl_x86_64"
fiecho $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
fiif [ "$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
donecd $CWD
cp -rf $THIN/$1/include $FAT
fi
- 若出现compiler cannot create executables,执行命令指定xcode路径
sudo xcode-select --switch /Users/relly/Downloads/Xcode.app/Contents/Developer/
相关文章:
iOS 开发-编译第三方库 openssl及curl
1、前提 iOS编译库需要三个架构,arm64,arm64e,x86_64,其中x86_64为模拟器所需 iOS编译库需要下载xcode及对应的command line tool(执行命令时可以自动下载),下载失败需要去官网搜索下载 2、openssl 参考iOS如何编译OpenSSL静态…...
运维监控学习笔记1
1、监控对象: 1、监控对象的理解;CPU是怎么工作的; 2、监控对象的指标:CPU使用率;上下文切换; 3、确定性能基准线:CPU负载多少才算高; 2、监控范围: 1、硬件监控&#x…...
由于找不到vcruntime140.dll,无法继续执行代码,三种修复方法
为什么我们很多人都遇到过打开电脑软件时候突然电脑就提示找不到vcruntime140.dll,或许vcruntime140.dll丢失,那么vcruntime140.dll到底是什么?为什么会丢失,丢失了要怎么解决修复呢?下面小编都会一一介绍给大家&#…...
【FPGA零基础学习之旅#10】按键消抖模块设计与验证(一段式状态机实现)
🎉欢迎来到FPGA专栏~按键消抖模块设计与验证 ☆* o(≧▽≦)o *☆嗨~我是小夏与酒🍹 ✨博客主页:小夏与酒的博客 🎈该系列文章专栏:FPGA学习之旅 文章作者技术和水平有限,如果文中出现错误,希望大…...
【EI复现】基于阶梯碳交易的含P2G-CCS耦合和燃气掺氢的虚拟电厂优化调度(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
高防cdn和高防服务器有什么不一样?
高防cdn: 相信很多看过我们文章的小伙伴对cdn已经很了解了,cdn的原理很简单,就是构建在网络上的很多个节点,为网站作内容 分发。使用户就近获取所需资源。且分配的cdn节点都是高防节点,每个节点都有防御功能。还…...
ppt怎么压缩?试试这样压缩文件
当PPT文件体积过大时,打开的速度就会很慢,演示的时候刘程度也会受到影响,其次,现在很多平台对于上传的文件是有大小限制的,比如超过100M的文件就无法上传、发送等等,那么,怎么才能压缩PPT文件呢…...
stm32 cubemx ps2无线(有线)手柄
文章目录 前言一、cubemx配置二、代码1.引入库bsp_hal_ps2.cbsp_hal_ps2.h 2.主函数 前言 本文讲解使用cubemx配置PS2手柄实现对手柄的按键和模拟值的读取。 很简单,库已经封装好了,直接就可以了。 文件 一、cubemx配置 这个很简单,不需要…...
【TI毫米波雷达笔记】sdk传参时的type避坑
【TI毫米波雷达笔记】sdk传参时的type避坑 这个函数要传一个结构体进去 然后结构体里面有个adcoutcfg结构体变量 adcoutcfg结构体里面共有三个变量 一个adcbitformat结构体 另外两保留 点开adcbitformat结构体发现是个32位段 一共四级结构体 那么请问 为什么adcoutcfg变量不直…...
【算法挨揍日记】day02——双指针算法_快乐数、盛最多水的容器
202. 快乐数 202. 快乐数https://leetcode.cn/problems/happy-number/ 题目: 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为: 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个…...
【Hilog】鸿蒙系统日志源码分析
【Hilog】鸿蒙系统日志源码分析 Hilog采用C/S结构,Hilogd作为服务端提供日志功能。Client端通过API调用(最终通过socket通讯)与HiLogd打交道。简易Block图如下。 这里主要分析一下。Hilog的读、写、压缩落盘,以及higlog与android…...
keil下载程序具体过程4:flash下载算法
引言 本篇文章将介绍flash算法文件,阐述从jlink如何下载镜像文件写入到内部的falsh。 一、XIP 在谈flash下载算法文件时,先说明XIP是什么。 芯片的启动方式有很多种:可以从RAM中启动、内部的flash、外部的flash等等(还有从sd卡、…...
如何快速的让自己从月入2000变成月入两万?
从月入2000变成月入两万 前言我们可以这么做:1.提升自己的技能:2.寻找更好的工作机会:寻找更好的工作机会是一个重要的目标,以下是几个建议: 3.开展副业或兼职工作:4.创业或投资:5.构建个人品牌…...
使用 CycleGAN 进行图像到图像转换
介绍 在人工智能和计算机视觉领域,CycleGAN 是一项非凡的创新,它重新定义了我们感知和操作图像的方式。这种尖端技术彻底改变了图像到图像的转换,实现了领域之间的无缝转换,例如将马变成斑马或将夏日风景变成雪景。在本文中,我们将揭开 CycleGAN 的魔力,并探索其在各个领…...
Svg使用和注册components文件夹内部全部为全局组件
1.安装SVG依赖插件 pnpm install vite-plugin-svg-icons -D 2. 封装SvgIcon <template><div><svg :style"{ width: width, height: height }"><use :xlink:href"prefix name" :fill"color"></use></svg>…...
解决idea编辑application.yml文件或properties文件没有提示问题
注意:这里说的没有提示,是针对application.properties和application.yml文件 解决办法:在idea的插件面板中,禁用或卸载 wl Spring Assistant插件即可解决问题。...
前端懒加载
懒加载的概念 懒加载也叫做延迟加载、按需加载,指的是在长网页中延迟加载图片数据,是一种较好的网页性能优化的方式。在比较长的网页或应用中,如果图片很多,所有的图片都被加载出来,而用户只能看到可视窗口的那一部分…...
【手动配置ip地址后,电脑仍自动分配ip的问题】
现象 手动给电脑分配了一个ipv4地址,但是电脑会自动分配一个169开头的ipv4,导致虽然可以上网,但访问不了局域网内其他的设备(我配置的另一个网关,所以可以上网) 原因 ip地址冲突了,把电脑的i…...
移远RM500U-CN模块直连嵌入式ubuntu实现拨号上网
目录 1 平台: 2 需要准备的资料 3 参考文档 4 编译环境与驱动移植 4.1 内核驱动添加厂家ID和产品ID 4. 2.添加零包处理 4.3 增加复位恢复机制 4.4 增加批量输出 批量输出 URB 的数量和容量 的数量和容量 4.5 内核配置与编译 5 QM500U-CN拨号(在开…...
【JavaWeb】MySQL基础操作
1 通用语法规则 SQL语句可以单行或者多行书写,以分号结尾SQL语句不区分大小写,关键字建议使用大写单行注释 --注释内容(通用) # 注释内容(MySQL独有)多行注释 /* 注释内容 */ 2 语句 数据库 -- 查…...
别再只盯着SENet了!手把手教你用PyTorch复现GCT,5行代码提升模型性能
5行代码实现GCT注意力模块:超越SENet的轻量级解决方案 在计算机视觉领域,注意力机制已经成为提升卷积神经网络性能的标配组件。从SENet到ECANet,研究者们不断探索更高效的通道注意力实现方式。然而,大多数方法都需要引入额外的可学…...
如何三步激活Adobe全家桶:Adobe-GenP通用补丁完整指南
如何三步激活Adobe全家桶:Adobe-GenP通用补丁完整指南 【免费下载链接】Adobe-GenP Adobe CC 2019/2020/2021/2022/2023 GenP Universal Patch 3.0 项目地址: https://gitcode.com/gh_mirrors/ad/Adobe-GenP 想要免费使用Adobe全家桶软件吗?Adobe…...
告别cd命令:如何让Windows右键菜单同时拥有CMD和PowerShell选项
双剑合璧:Windows右键菜单同时集成CMD与PowerShell的终极方案 每次在资源管理器里按住Shift键右键点击文件夹时,你是否也纠结过该选择命令提示符还是PowerShell?作为Windows系统管理中最常用的两个命令行工具,它们各有独特的优势场…...
从DeepSeek-R1的“偏科”说起:为什么纯强化学习搞定了数学编程,却搞不定写作和工具调用?
从DeepSeek-R1的"偏科"看AI技术的边界:为什么纯强化学习能解数学题却写不好文章? 当DeepSeek-R1在国际数学竞赛中击败99%的人类选手时,开发者们却在后台发现了一个有趣现象:这个能写出完美数学证明的AI,在尝…...
AI 视频生成新标杆!LTX-2.3-DISTILLED-1.1 整合包:解压即用,支持多人对话/对唱
一、 为什么 LTX-2.3-DISTILLED 是当下的“真香”选择?在 AI 视频生成领域,如何让画面中的多个人物实现自然的交互,一直是技术难点。最新的 LTX-2.3-DISTILLED-1.1 版本通过模型蒸馏技术,不仅大幅降低了对显存的占用,更…...
树莓派CM4打造高效NAS:PiBox 2 Mini硬件与软件解析
1. PiBox 2 Mini硬件架构解析PiBox 2 Mini的核心设计理念是将树莓派CM4模块的灵活性与专业存储设备的功能性相结合。作为一款紧凑型网络存储解决方案,其硬件架构充分考虑了家庭和小型办公室环境下的实际需求。1.1 核心计算模块选型采用树莓派CM4模块作为计算核心是经…...
Jmeter性能测试踩坑记:我的Token为什么在第二个线程组里失效了?
Jmeter性能测试踩坑记:我的Token为什么在第二个线程组里失效了? 第一次用Jmeter做完整业务流程的性能测试时,我遇到了一个让人抓狂的问题——登录成功后获取的Token,在第二个线程组里竟然失效了!所有后续请求都返回401…...
复旦微FMQL芯片PS网口调试实录:一路MDIO控制双PHY的完整配置与排错心法
复旦微FMQL芯片双PHY网络配置实战:从设备树优化到链路调优 在嵌入式网络接口开发中,多网口设计常面临MDIO总线资源紧张的问题。FMQL系列芯片作为国产高性能可编程SoC,其PS侧双千兆以太网控制器(GMAC)的灵活配置为复杂网络拓扑提供了可能。本…...
三步掌握BilibiliDown:从零开始的B站视频高效下载指南
三步掌握BilibiliDown:从零开始的B站视频高效下载指南 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirrors/b…...
5G网络邻区同步与测量:从信号捕获到智能切换的实战解析
1. 5G邻区同步的核心流程解析 当你的手机从地铁站走到写字楼时,能保持视频通话不中断,背后正是邻区同步在发挥作用。这个过程就像搬家时先摸清新社区环境:要找到最近的超市(同步信道)、了解社区公告栏(广播…...
