Qt for iOS 应用使用自定义动态库 Framework

2023-10-31

转自:https://www.mycode.net.cn/language/cpp/2768.html

 

本文内容适合当你想使用 Qt 调用 xcode 开发的动态库 framework 做 iOS 应用的场景,文中涉及到原始动态库 framework 文件的配置,以及 Qt 如何引入和打包动态库 framework 到自身程序中的方法。

动态库 framework 的配置

默认 xcode 创建的 framework 都已经是动态库形式了,所以这里不多介绍,请确保你的 Build Settings 中以下设置是无误的,特别是 Dynamic Library Install Name Base,它决定了动态库能否被应用成功搜索到。

 

对于 @rpath 的说明,请看这里:https://www.cnblogs.com/csuftzzk/p/mac_run_path.html

Qt 项目配置引入 framework

Qt 引入 framework 只需要给 LIBS 追加 framework 的路径和要链接的文件就可以了,配置如下,请注意使用 framework 参数是 -F 和 -framework(注意大小写)

LIBS += -F$$PWD/../../build/Products/Release
LIBS += -framework my_dylib.framework

这样引入还是不行的,因为 iOS 应用部署上去以后动态库的 framework 文件是不会跟随打包进去的,所以你还需要做一件事情就是把 framework 打包到你的应用中,配置如下:

MY_DYLIB_FRAMEWORK.files = $$PWD/../../build/Products/Release-iphoneos/my_dylib.framework
MY_DYLIB_FRAMEWORK.path = /Frameworks
QMAKE_BUNDLE_DATA += MY_DYLIB_FRAMEWORK

分别指定了 framework 文件的路径和要被打包进去的目标路径,这里是将 $$PWD/../../build/Products/Release-iphoneos/my_dylib.framework 这个 framework 打包到了应用的 /Framework 目录下。最终你看到的应用目录结构是这样的

├── Default-568h@2x.png
├── Frameworks
│   └── my_dylib.framework
│       ├── Info.plist
│       ├── ReadMe.txt
│       ├── _CodeSignature
│       │   └── CodeResources
│       └── my_dylib
├── Info.plist
├── LaunchScreen.nib
├── PkgInfo
├── _CodeSignature
│   └── CodeResources
└── cross-platform-demo

可以看到,mu_dylib.framework 文件已经在我们应用的 /Framework 目录下了,这样文件就被打包进去了,而且当你使用 Qt 编译程序的时候,在 Build Shadow 目录下会看到生成对应的 xcodeproj 文件,可以直接使用 xcode 打开,使用 xcode 打开项目后可以看到项目的 Build Phases 下面多了一条 Copy file to bundle 的项目:

 

 

但是当你尝试在 iOS 或者模拟机中运行这个应用时你会发现又有新的错误了,如下所示:

dyld: Library not loaded: @rpath/my_dylib.framework/my_dylib
  Referenced from: /var/containers/Bundle/Application/D0143CDE-FFFE-4343-BFD9-D70DA66C831F/cross-platform-demo.app/cross-platform-demo
  Reason: image not found
program received signal 6, thread:15362b

我明明已经把文件复制进去了,为什么还是会提示,还记得上面我们提到的 Dynamic Library Install Name Base 吗?这是动态库 framework 设置的,根据上面文章的资料,我们要在调用该模块的应用中设置 rpath 的搜索范围,让其能找到我们的动态库文件。Qt 项目中添加如下配置:

# 添加应用的 runpath 路径,因为 my_dylib 动态库 Framework 设置的 install path 为 rpath,所以应用使用时需要单独设置
QMAKE_LFLAGS += -Wl,-rpath,@loader_path/Frameworks

 

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

Qt for iOS 应用使用自定义动态库 Framework 的相关文章

  • OD华为机试 24

    两数之和绝对值最小 描述 给定一个从小到大的有序整数序列 存在正整数和负整数 数组 nums 请你在该数组中找出两个数 其和的绝对值 nums x nums y 为最小值 并返回这个绝对值 每种输入只会对应一个答案 但是 数组中同一个元素不
  • Unity Shader 学习 004-Shader 调试 平台差异性 第三方调试工具

    文章目录 学习时间 学习产出 1 调试Shader 1 1 我们打开FrameDebug窗口 1 2 通过FrameDebug窗口查看我们shader渲染目标的状态 2 平台差异性 2 1 抗锯齿 2 2 DX平台定义变量更严格 3 第三方
  • 利用nodemcu和mqtt协议让嵌入式设备接入互联网(一.layui前端框架)

    文章目录 前言 HTML知识简单总结 vscode快捷操作 HTML知识总结 HMTL结构 头部 身体 样式表CSS layui介绍 源码 前言 为了让自己的嵌入设备接入互联网 而且能互相通讯 用直接的TCP或者UDP协议肯定是不够的 在了
  • 华清 c++ day2 9月7

    include
  • React 状态、事件与动态渲染

    全文共 3663 个字 列表与组件的键值 首先让我们看看在JavaScript中我们是如何处理一个列表的 const numbers 1 2 3 4 5 const doubled numbers map number gt number
  • Java8函数式编程(一):

    函数式编程是一个有且只有一个的抽象方法 然后可以有多个非抽象方法的接口 可以通过Lambda表达式来直接调用 实际上有段时间函数式编程还挺多推崇的 当然这都是要学习成本的 你最起码要知道什么是拉必达表达式 Java8提供了这种 实际上JDK
  • 加密授权验证学习之一 ——获取计算机CPUID序列号

    最近项目中需要对CPUID 硬盘序列号 网卡物理地址进行加密授权验证 网上这方面的资料代码很多 但很多都有错或者不能正确获取 通过整理与学习 将自己已经正确获得的代码分享出来吧 code include
  • 一篇文章带你搞懂Docker存储

    存储驱动 由storage driver管理的镜像层和可读写层 数据卷 概念 Data Volume本质上是Data Host文件系统中的文件或目录 能够被直接mount到容器的文件系统中 特点 1 Data Volume是目录或文件 而非
  • Unity3D中UGUI的RectTransform对齐方式详解

    https www jianshu com p 831e2dd7c546 https www jianshu com p 4592bf809c8b 在Unity自带的UGUI中 RectTransform扮演了极其重要的角色 可以说基本上所
  • Andriod HAXM device is not found 解决办法

    HAXM device is not found 提示条件下 无法打开仿真器 运行时会出现 启动AVD失败 重新安装HAXM可解决此问题 1 检查BIOS虚拟设置是否打开 一般都打开了 2 进入Android studio 点击右上角小齿轮
  • 均方误差(MSE)和均方根误差(RMSE)和平均绝对误差(MAE)

    MSE Mean Squared Error 均方误差是指参数估计值与参数真值之差平方的期望值 MSE可以评价数据的变化程度 MSE的值越小 说明预测模型描述实验数据具有更好的精确度 RMSE 均方误差 均方根误差是均方误差的算术平方根 M
  • shiro 持久化到数据库

    https www cnblogs com youzhibing p 9749427 html
  • 算法(哈希表)——快乐数

    文章目录 1 题目描述 2 解题思路 3 代码实现 1 题目描述 编写一个算法来判断一个数 n 是不是快乐数 快乐数定义为 对于一个正整数 每一次将该数替换为它每个位置上的数字的平方和 然后重复这个过程直到这个数变为 1 也可能是 无限循环
  • 解决WORD中图片随文字移动问题

    在WORD中插入或者粘贴进图片后 发现编辑图片上下行文字时 图片会随文字移动 如果想要图片不随文字移动 可以这样做 选中图片 查看布局选项 右键 gt 设置图片格式 gt 布局 可以看到文字环绕形式为 上下环绕 且选中了随文字移动选项 点击
  • 使用Hypothesis生成测试数据

    Hypothesis是Python的一个高级测试库 它允许编写测试用例时参数化 然后生成使测试失败的简单易懂的测试数据 可以用更少的工作在代码中发现更多的bug 安装 pip install hypothesis 如何设计测试数据 通过介绍
  • MATLAB绘图/数据的可视化

    MATLAB绘图 数据的可视化 二维绘图 科研绘图模板 利用MATLAB直接对Excel数据绘图 三维绘图 MATLAB数据可视化是极重要的功能 文章介绍了MATLAB绘图与数据可视化的相关方法 阅读本文读者可以快速掌握MATLAB绘图技巧
  • 【Unity 3D】学习笔记(三)

    基本操作演练 下载 Fantasy Skybox FREE 构建自己的游戏场景 天空是任何游戏离不开的设定 而且要按季节与时间变化 是表示时间的重要工具 天空盒是一种材料 我们可以通过六面体构建一个天空盒 首先点击Asset上下文菜单 gt
  • shineblink APDS-9960传感器感应手势

    APDS 9960感应手势 一 本例程实现功能 二 传感器应用限制说明 三 接线图 五 完整代码 六 代码运行结果 一 本例程实现功能 通过APDS 9960传感器模块感应在传感器表面正上方的 上 下 左 右 手势动作 二 传感器应用限制说
  • 学习笔记(01):java美妆商城项目

    立即学习 https edu csdn net course play 23989 290220 utm source blogtoedu 第一节笔记 1 前端 jsp css javascript jQuery js框架 bootstra

随机推荐

  • SpringBoot+MyBatisPlus+thymeleaf增删改查

    SpringBoot MyBatisPlus thymeleaf增删改查 文章目录 SpringBoot MyBatisPlus thymeleaf增删改查 前言 作者简介 在校学生一枚 Java领域新星创作者 Java正在学习中 期待和大
  • 【Python习题集6】类与对象

    类与对象 一 实验内容 二 实验总结 一 实验内容 1 设计一个Circle类来表示圆 这个类包含圆的半径以及求面积和周长的函数 在使用这个类创建半径为1 10的圆 并计算出相应的面积和周长 半径为1的圆 面积 3 14 周长 6 28 半
  • SSH、shell、Xshell 、bash、Git、Git bash 、Git shell区别与联系

    SSH是安全外壳协议 为 Secure Shell 的缩写 SSH 为建立在应用层和传输层基础上的安全协议 专为远程登录会话和其他网络服务提供安全性的协议 利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题 SSH工具 有一个软件叫
  • vscode 函数没有引入提示_VSCODE编译头文件时函数没有定义的解决方案(VSCODE手动链接C文件方法)...

    在使用VSCODE进行C语言程序设计时 如果用到了头文件声明函数 c文件定义函数 在编译时尽管已经引用了相应的头文件 VSCODE文本编辑器也没有报错 但仍然无法编译 错误提示如下 d ComputerHomework 2019 winte
  • Java导入导出json

    1 导入依赖
  • 模式识别与操作符在CEP中的应用

    模式识别与操作符在CEP中的应用 随着大数据技术的快速发展 复杂事件处理 Complex Event Processing CEP 成为了处理实时流数据的重要工具 CEP通过对实时数据流进行高级模式识别和复杂操作符的运算 可以从海量数据中提
  • 微信小程序基础面试题【29道】

    这里写目录标题 1 请谈谈wxml与标准的html的异同 2 请谈谈WXSS和CSS的异同 3 请谈谈微信小程序主要目录和文件的作用 4 请谈谈小程序的双向绑定和vue的异同 5 简单描述下微信小程序的相关文件类型 6 微信小程序有哪些传值
  • 大数据毕设选题 - 疫情数据分析可视化系统(python flask 爬虫)

    文章目录 0 前言 1 课题背景 2 实现效果 2 1 整体界面展示 2 2 31省病例柱形图 2 3 全国现有确诊人数趋势 2 4 中国累计确诊时间线 2 5 中国疫情情况饼状图 2 6 高风险树状图 3 相关理论及技术 3 1爬虫 3
  • <VTK(0)> VTK8.2+VS2019环境配置

    VTK8 2 VS2019编译 最近用到VTK库 打算重新编译 发现能找到的资源中VTK库的编译比较详细 但是VS的环境配置比较乱 这里简述VTK的源码编译并提供VS环境配置的保姆教学 准备工作 1 安装VS2019 自查 Visual S
  • 阿里P7大牛整理!腾讯、阿里Android高级面试真题汇总,经典好文

    开头 相信大多数互联网的从业者都有着这样一个梦想 进大厂 获得丰厚的薪酬 和更优秀的人一起共事 在技术上获得更快的成长 然而部分人其实一直都陷入了 穷忙 的困局 觉得自己每天白天黑夜都在工作 高强度输出 但是却并没有获得机会的眷顾 久而久之
  • 生成随机颜色和随机数的生成

    1 随机颜色生成 方法1 var color parseInt Math random 0XFFFFFF toString 16 方法2 var color rgba parseInt Math random 256 parseInt Ma
  • [ZZ]【电子电路】上下拉电阻总结

    上下拉电阻总结 SkySeraph整理 2009 6 上拉电阻 1 当TTL电路驱动COMS电路时 如果TTL电路输出的高电平低于COMS电路的最低高电平 一般为3 5V 这时就需要在TTL的输出端接上拉电阻 以提高输出高电平的值 TTL
  • 基于yolov5交通标志识别(毕业设计)

    1 数据集 TT100K数据集 是由清华与腾讯的联合实验室整理并公布的 提供的10万张图像包含了30000个交通标志 图像来源于由6个像素很高的广角单反相机在中国的多个城市拍摄的腾讯街景全景图 拍摄地点的光照条件 天气条件有所不同 原始的街
  • 浅谈 forEach()

    用于遍历数组 无返回值 let arr 1 2 3 4 arr forEach function item index array array index item 2 console log arr 2 4 6 8 可以看到 forEac
  • 【C++入门】深拷贝和浅拷贝详解

    1 深拷贝和浅拷贝 1 当我们对复杂类型 结构体或者类 的对象进行初始化时 如果将同类型的对象A赋值给同类型的对象B 此时就涉及深拷贝和浅拷贝的问题 2 如何定义拷贝的深和浅 浅拷贝就是把类 结构体的变量原封不动的赋值 不考虑指针变量 深拷
  • 蓝桥杯-山(java)

    问题描述 这天小明正在学数数 他突然发现有些正整数的形状像一座 山 比如 123565321 145541 它们左右对称 回文 且数位上的数字先单调不减 后单调不增 小明数了很久也没有数完 他想让你告诉他在区间 2022 202222202
  • 调试osgEarth(六)earth文件如何解析成Config

    感谢 hankern 学习资料链接在https blog csdn net hankern article details 83933739 前面提到了创建插件osgDB earthd dll 和加载了该插件 就该读取和解析了 先看如何读取
  • java mysql连接两张表_java连接数据库对两张表进行查询对比的小项目

    下面是客户端的启动代码 public static void main String args throws UnknownHostException IOException TODO Auto generated method stub
  • sshd登录问题: pam_unix(sshd:session): session closed for user root

    报错 pam unix sshd session session closed for user root 工位上使用ssh无法root登录 其他账户也一样 1 踢账户 反复发作 who pkill kill t pts 1 who 2 期
  • Qt for iOS 应用使用自定义动态库 Framework

    转自 https www mycode net cn language cpp 2768 html 本文内容适合当你想使用 Qt 调用 xcode 开发的动态库 framework 做 iOS 应用的场景 文中涉及到原始动态库 framew