iOS 版 QtCreator:如何使用我的应用程序部署 dylib 共享库

2024-03-16

我在 iOS 上部署动态共享库时遇到了困难。

为了隔离和暴露问题,我有一个非常简单的“HelloWorld”项目:一个库导出类,其中包含返回“Hello World”的函数,以及一个使用该类并显示消息的程序。

我正在使用 QtCreator 和 Qt 5.5。

我能够生成.dylib文件并链接我的程序。但是,当我将其部署到 iPhone 上时,出现错误:

Démarrage des processus distants.
dyld: Library not loaded: libMyLib.1.dylib
  Referenced from: /private/var/mobile/Containers/Bundle/Application/D6942CCE-828D-4C10-86DA-F7DA7ADF7449/MyApp.app/MyApp
  Reason: image not found 

在 Android 上,我遇到了同样的问题,可以通过手动将共享库添加到最终包 (apk) 文件来修复它,使用ANDROID_EXTRA_LIBS。但我找不到 iOS 的等效项。

这是我的 .pro 文件。可以下载完整的项目here https://bugreports.qt.io/secure/attachment/51438/bug_dylib.zip。我将此报告给Qt 作为一个 bug https://bugreports.qt.io/browse/QTCREATORBUG-15135,但如果有人能提出一种解决方法,这将会有所帮助!

MyLib.pro:

QT       -= core gui

TARGET = MyLib
TEMPLATE = lib

DEFINES += MYLIB_LIBRARY

SOURCES += mylib.cpp

CONFIG += shared

HEADERS += mylib.h\
        mylib_global.h

我的应用程序.pro:

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = MyApp
TEMPLATE = app


SOURCES += main.cpp\
        dialog.cpp

HEADERS  += dialog.h

INCLUDEPATH += ../MyLib

LIBS += ../MyLib/libMyLib.dylib

我希望解决方案全部嵌入到 QtCreator 中。这里唯一需要更改的是两个 .pro 文件之一。可能通过构建后调用 MACOS 命令...?或者只是 MyApp.pro 中的构建后指令,在部署应用程序之前将 dylib 复制到正确的位置(.app 目标文件夹)?我真的很惊讶 QtCreator 没有默默地涵盖这一点......

Note: 这个问题 https://stackoverflow.com/questions/13611740/qt-mac-osx-10-8-dyld-library-not-loaded-image-not-found建议设置DYLD_LIBRARY_PATH。但我不知道如何在 MyApp.pro 文件中执行此操作,也不知道它对 iOS 部署有什么帮助(因为 LD_LIBRARY_PATH 可以设置 lib 的 MAC 路径,而不是 lib 的 iPhone 路径...)


1)在你的库项目中确保你的dylibs有安装名@rpath/mylib.dylib或诸如此类。例如。通过增加QMAKE_SONAME_PREFIX = @rpath到您的库 .pro 文件。
(您可以通过查看第一行来检查otool -L /path/to/libmylib.dylib。如果该库是预构建的第三方库,请将其更改为install_name_tool -id @rpath/libmylib.dylib)

2)将以下内容添加到应用程序.pro文件中

# link to the lib:
LIBS += -L../mylib -lmylib
# make the app find the libs:
QMAKE_RPATHDIR = @executable_path/Frameworks
# deploy the libs:
mylib.files = $$OUT_PWD/mylib/libmylib.1.dylib
mylib.path = Frameworks
QMAKE_BUNDLE_DATA += mylib
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iOS 版 QtCreator:如何使用我的应用程序部署 dylib 共享库 的相关文章

  • 解析 JWT 令牌以仅获取有效负载内容,无需 C# 或 Blazor 中的外部库

    我正在使用 Blazor 编写可以访问 JWT 的客户端应用程序 我想知道一种简单的方法来读取令牌有效负载内容而不添加额外的依赖项 因为我不需要其他信息 也不需要验证令牌 我认为解析有效负载内容应该足够简单 只需将其写入方法即可 JwtTo
  • linq 中使用字符串数组 c# 的 'orderby'

    假设我有一个这样的方法定义 public CustomerOrderData GetCustomerOrderData string CustomerIDs var query from a in db Customer join b in
  • 运行需要 MySql.Data 的内置 .NET 应用程序

    我在运行我编写的内置 NET 应用程序时遇到问题 我的应用程序使用最新的 MySql 连接器 该连接器安装在我的系统上 当我尝试将其添加为引用时 该连接器显示为 NET 4 Framwork 组件 当我在环境中以调试模式运行应用程序时 一切
  • 是否存在指向不同类型的指针具有不同大小的平台?

    C 标准允许指向不同类型的指针具有不同的大小 例如sizeof char sizeof int 是允许的 但是 它确实要求如果将指针转换为void 然后转换回其原始类型 它必须与其原始值进行比较 因此 从逻辑上来说 sizeof void
  • 当 Firebase 函数以 Swift 结束时

    我在我的应用程序中使用 Firebase 它查询大量用户并获取所需的特定数据 但是当它开始查询时 其余功能也继续运行 而不仅仅是查询 所以我无法理解当它结束时 例如在这段代码中 ref observeEventType ChildAdded
  • ios - 使用 SIGPIPE 和 SIG_IGN 的信号函数

    我加入了一个旧项目 我发现了这条线 BOOL application UIApplication application didFinishLaunchingWithOptions NSDictionary launchOptions si
  • C# 5 async/await 线程机制感觉不对?

    为什么让调用线程进入异步方法直到内部 等待 一旦调用异步方法就生成一个线程 这不是更干净吗 这样您就可以确定异步方法会立即返回 您不必担心在异步方法的早期阶段没有做任何昂贵的事情 我倾向于知道某个方法是否要在 我的 线程上执行代码 不管是堵
  • 将表(行)与 OpenXML SDK 2.5 保持在一起

    我想在 Word 文档中生成多个表 每行 2 行 但我想将这两行保留在一起 如果可能的话 new KeepNext 第一行不起作用 new KeepNext 第一行的最后一段不起作用 new CantSplit 放在桌子上不起作用 在所有情
  • 获取 boost Spirit 语法中的当前行

    我正在尝试使用 boostspirit 获取正在解析的文件的当前行 我创建了一个语法类和结构来解析我的命令 我还想跟踪在哪一行找到命令并将其解析到我的结构中 我将 istream 文件迭代器包装在 multi pass 迭代器中 然后将其包
  • 将接口转换为其具体实现对象,反之亦然?

    在 C 中 当我有一个接口和几个具体实现时 我可以将接口强制转换为具体类型 还是将具体类型强制转换为接口 这种情况下的规则是什么 Java 和 C 中都允许这两个方向 向下转型需要显式转型 如果对象类型不正确 可能会抛出异常 然而 向上转换
  • 引用/指针失效到底是什么?

    我找不到任何定义指针 引用无效在标准中 我问这个问题是因为我刚刚发现 C 11 禁止字符串的写时复制 COW 据我了解 如果应用了 COW 那么p仍然是一个有效的指针并且r以下命令后的有效参考 std string s abc std st
  • 从浏览器访问本地文件?

    您好 我想从浏览器访问系统的本地文件 由于涉及大量安全检查 是否可以通过某种方式实现这一目标 或使用 ActiveX 或 Java Applet 的任何其他工作环境 请帮帮我 要通过浏览器访问本地文件 您可以使用签名的 Java Apple
  • 逆向工程 ASP.NET Web 应用程序

    我有一个 ASP NET Web 应用程序 我没有源代码 该 bin 包含 10 个程序集和一个 compiled 文件 我在 App Code dll 上使用 Reflector 它向我显示了类和命名空间之类的东西 但它太混乱了 有没有什
  • 如何停止无限循环?

    我正在编写一个程序 该程序将计算三角形或正方形的面积 然后提示用户是否希望计算另一个 我的代码已经运行到可以计算任一形状的面积的程度 但随后不再继续执行代码的其余部分 例如 如果选择了正方形 则计算面积 然后返回到正方形边长的提示 我假设这
  • CUDA 8 编译错误 -std=gnu++11

    我正在尝试转换一些代码以使用 CUDA 并且我认为我遇到了兼容性问题 我们使用CMake 这些是我使用的 gcc 和 CUDA 版本 gcc version gcc Ubuntu 5 4 0 6ubuntu1 16 04 5 5 4 0 2
  • LINQ 中的“from..where”或“FirstOrDefault”

    传统上 当我尝试从数据库中获取用户的数据时 我使用了以下方法 在某种程度上 DbUsers curUser context DbUsers FirstOrDefault x gt x u LoginName id string name c
  • 来自 3rd 方库的链接器错误 LNK2019

    我正在将旧的 vc 6 0 应用程序移植到 vs2005 我收到以下链接器错误 我花了几天时间试图找到解决方案 错误LNK2019 无法解析的外部符号 imp 创建AwnService 52 在函数 public int thiscall
  • DataContractSerializer 事件/委托字段问题

    在我的 WPF 应用程序中 我正在使用DataContractSerializer序列化对象 我发现它无法序列化具有事件或委托声明的类型 考虑以下失败的代码 Serializable public abstract class BaseCl
  • 结构化绑定的用例有哪些?

    C 17 标准引入了新的结构化绑定 http en cppreference com w cpp language structured binding功能 最初是proposed http www open std org jtc1 sc
  • 为什么匹配模板类上的部分类模板特化与没有模板匹配的另一个部分特化不明确?

    这个问题可能很难用标题中的句子来描述 但这里有一个最小的例子 include

随机推荐

  • 在catplot中指定颜色

    我想使用seaborn catplot 指定特定观察结果的颜色 在一个虚构的例子中 import seaborn as sns import random as r name list pepe Fabrice jim Michael co
  • C++/CLI,类声明之外的静态构造函数

    如何将托管类的静态构造函数的主体放在类声明之外 这种语法似乎是可编译的 但它真的意味着静态构造函数 还是只是一个静态 在翻译单元之外不可见 函数 ref class Foo static Foo static Foo Foo 是的 这是创建
  • 如何模拟不会导致脆弱测试的实现细节

    我正在读一本关于单元测试的书 下面是引用和代码 不是完整的代码 因为很容易理解代码的作用 首先 作者展示了一个不会导致脆弱测试的嘲笑 Fact public void Successful purchase var mock new Moc
  • 在 Python 中验证 ISO-8601 日期时间字符串?

    我想编写一个接受字符串并返回的函数True如果它是有效的 ISO 8601 日期时间 精确到微秒 包括时区偏移 False否则 我已经发现other https stackoverflow com questions 969285 how
  • 将规则index.php?/controller/method/param重写为/controller/method/param

    我需要这个网址的重写规则 http localhost user frame lib index php controller method 12 22 我怎样才能重写它 我可以这样称呼它 http localhost user frame
  • 如何设置设备邮件发件人姓名?

    我正在使用 Rails 设计 gem 设计向新用户发送确认电子邮件 Actionmailer 配置为使用我的 Gmail 帐户发送电子邮件 电子邮件由发件人发送 电子邮件受保护 cdn cgi l email protection 这是我的
  • 无法在 Linux Mint 19.3 中安装 R 3.6.2 中的 httr 包

    我对 R 完全陌生 我尝试安装httr包裹 我首先安装了 pacman 然后尝试通过运行来加载 httrpacman p load httr 它没有成功 它在终端中显示以下消息 将包安装到 home 用户名 R x86 64 pc linu
  • hdfs 命令在 hadoop 中已弃用

    我正在关注这个程序 http www codeproject com Articles 757934 Apache Hadoop for Windows Platform YouTube 链接 https www youtube com w
  • 如何从文本框获取值

    我改变了我的问题 因为它可能不被理解 也对不起我的英语 动态创建文本框 将它们放入数组中 我的一段代码 public partial class NewArticleForm System Web UI Page private Label
  • 响应式 JavaScript:仅针对小设备宽度执行代码

    我有一些简单的 JavaScript 嵌入在事件中 我只想为小型设备触发它们 电话等 目前我正在做 if window width lt 606 do things 但这感觉很笨拙 有没有办法只对小于某个断点的设备执行此操作 除了设置较早的
  • 为什么在 asp.net 身份中验证电话号码后注销?

    我在我的项目中使用 asp net Identity 在VerifyPhoneNumber查看 当用户确认他的电话号码时 他已注销 AspNetApplicationCookie已移除 我从 资源 选项卡 检查 chrome 中检查了这一点
  • 对多个项目和配置有效使用 Visual Studio 项目属性

    我一直使用 Visual Studio 内置的 GUI 支持来配置我的项目 通常使用属性表 以便多个项目将使用通用集 我对此的主要抱怨之一是管理多个项目 配置和平台 如果您只是使用主 GUI 执行所有操作 右键单击项目 gt 属性 它很快就
  • 如何用 GridLayoutManager 从右到左填充 RecyclerView

    我正在尝试将一些数据填充到RecyclerView with GridLayoutManager GridLayoutManager layoutManager new GridLayoutManager this 3 GridLayout
  • Visual Studio 2012 包管理器控制台错误

    当尝试使用包管理器控制台安装任何内容时 我收到此错误 Install Package The schema version of Microsoft Bcl is incompatible with version 2 0 30625 90
  • Coq:添加“强归纳”策略

    对自然数的 强 或 完全 归纳意味着当证明 n 上的归纳步骤时 您可以假设该属性对于任何 k 都成立 Theorem strong induction forall P nat gt Prop forall n nat forall k n
  • 常规网络服务

    我尝试过使用http groovy codehaus org GroovyWS http groovy codehaus org GroovyWS 在我的 BuildConfig groovy 中 我添加了 compile org code
  • 使用YQL多查询&XPath解析HTML,如何转义嵌套引号?

    标题比它必须的更复杂 这是问题查询 SELECT FROM query multi WHERE queries SELECT FROM html WHERE url http www stumbleupon com url http www
  • PHP 动态调整图像大小与存储调整大小的图像

    我正在构建一个图像共享网站 想了解使用 PHP 动态调整图像大小并存储调整后的图像的优缺点 哪个更快 哪个更可靠 两种方法在速度和性能上差距有多大 请注意 无论哪种方式 图像都会通过 PHP 脚本进行统计 例如视图 或者是否允许热链接等 因
  • 在 Java 中创建一个填充随机整数的文本文件

    也许是个愚蠢的问题 但我尝试用 512 个整数填充一个空文本文件 每个整数在每个新行上 我能够将它们随机化并写入文件中 但它们创建了一大堆我想要的数字 谁能帮我纠正我的代码吗 import java io BufferedWriter im
  • iOS 版 QtCreator:如何使用我的应用程序部署 dylib 共享库

    我在 iOS 上部署动态共享库时遇到了困难 为了隔离和暴露问题 我有一个非常简单的 HelloWorld 项目 一个库导出类 其中包含返回 Hello World 的函数 以及一个使用该类并显示消息的程序 我正在使用 QtCreator 和