使用 Mac 应用程序部署 Qt 框架以及 otool 的使用

2024-01-19

我在使用我的 Mac 应用程序部署 Qt 框架时遇到问题,我希望有人能知道为什么当我在干净的 Mac(即不是开发人员 Mac)上运行该应用程序时会出现此错误。

操作系统:10.7 .2 并使用 XCode

错误消息:

Library not loaded: @loader_path/../Frameworks/QtCore.framework/Versions/4.0/QtCore
Referenced from:/Users/someUser/Downloads/MainApp.app/Contents/Resources/Lib/Library.bundle/Contents/MacOS/../Frameworks/../Frameworks/QtXml.framework/Versions/4/QtXml

显然有问题,因为 QtXml 是从 /../Frameworks/../Frameworks 引用的,而 /../Frameworks/../Frameworks 并不存在。

这是设置:我有一个使用 QtCore 和 QtXml 的 dylib(不是我选择的,但现在我需要这两个框架),dylib 在 NSBundle 中使用,它由主应用程序加载,捆绑包是位于资源文件夹中。 dylib 通过复制文件构建阶段移动到文件夹 Contents/Frameworks 并使用 otool 将 install_name 设置为(如http://doc.qt.digia.com/4.3/deployment-mac.html http://doc.qt.digia.com/4.3/deployment-mac.html):

@loader_path/../Frameworks/QtCore.framework/Versions/4.0/QtCore
@loader_path/../Frameworks/QtXml.framework/Versions/4/QtXml

然后将 Qt 框架移至 Contents/Frameworks 并将其 install_name 设置为:

@executable_path/../Frameworks/QtCore.framework/Versions/4.0/QtCore

对于 QtXml @executable_path/../Frameworks/QtXml.framework/Versions/4/QtXml 参考QtCore: @executable_path/../Frameworks/QtCore.framework/Versions/4.0/QtCore

现在,当我在开发人员 mac 上运行该应用程序时,由于安装了 Qt,它显然可以正常工作,但是当转移到干净的 mac 上时,我收到错误消息,可以在控制台应用程序中读取。 我尝试将executable_path更改为loader_path,但这不起作用。 我不知道我做错了什么,也不知道为什么不行,而且在谷歌上找不到任何东西,当然我可能找错了地方。有什么想法如何解决这个问题吗?

这是完整的错误消息:

MainApp:错误域=NSCocoaErrorDomain代码=3587“捆绑包 “库”因损坏或丢失而无法加载 必要的资源。”
(dlopen_preflight(/Users/someUser/Downloads/MainApp.app/Contents/Resources/Lib/Library.bundle/ 内容/MacOS/Library):库未加载:
@loader_path/../Frameworks/QtCore.framework/Versions/4.0/QtCore 引用自:/Users/ someUser /Downloads/ MainApp.app/Contents/Resources/Lib/Library.bundle/Contents/MacOS/../Frameworks/../Frameworks/QtXml.framework/Versions/4/QtXml 原因:未找到图像)UserInfo=0x107c5d5d0 {NSLocalizedFailureReason=捆绑包已损坏或缺少必需的 资源。, NSLocalizedRecoverySuggestion=尝试重新安装 捆。, NSFilePath=/Users/someUser/Downloads/MainApp.app/Contents/Resources/Lib/Library.bundle/Contents/MacOS/Library, NSDebugDescription=dlopen_preflight(/用户/someUser /Downloads/MainApp.app/Contents/Resources/Lib/Library.bundle/Contents/MacOS/Library): 库未加载: @loader_path/../Frameworks/QtCore.framework/Versions/4.0/QtCore
参考自: /Users/someUser/Downloads/MainApp.app/Contents/Resources/Lib/Library.bundle/Contents/MacOS/../Frameworks/../Frameworks/QtXml.framework/Versions/4/QtXml 原因:找不到图片, NSBundlePath=/Users/someUser/Downloads/MainApp.app/Contents/Resources/Lib/Library.bundle, NSLocalizedDescription=无法加载包“Library”,因为 它已损坏或缺少必要的资源。}


在开发 mac 上一切正常,因为安装了 Qt 库。不过,在您将应用程序运送到的任何 Mac 上,情况可能并非如此。 Qt 套件附带了一个名为macdeployqt解决这个问题。因此,在终端中,编译应用程序后,执行以下操作:

# cd my-cool-app-Desktop
# macdeployqt my-cool-app.app

请注意,它还可以用于创建 .dmg 文件以将所有内容一起传送:

# cd my-cool-app-Desktop
# macdeployqt my-cool-app.app -dmg

完成此操作后,可以将 .app 目录或 .dmg 文件提供给未安装 Qt 的其他人,以像平常一样使用和运行。

需要注意的是,下次您尝试在开发人员计算机上运行它时,它可能会抱怨安装了多个共享库。因此,一旦您将其复制到其他位置以便分发它,请删除整个 .app 目录并让 qtcreator (或其他)重建它。

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

使用 Mac 应用程序部署 Qt 框架以及 otool 的使用 的相关文章

随机推荐

  • App Store 必须使用 iOS 15 SDK 或更高版本构建,包含在 Xcode 13 或更高版本中

    错误 ITMS 90725 SDK 版本问题 此应用程序是使用 iOS 14 4 SDK 构建的 提交到 App Store 的所有 iOS 应用程序都必须使用 iOS 15 SDK 或更高版本构建 包含在 Xcode 13 或更高版本中
  • R 中带有加权数据的频率表

    我需要按年龄和婚姻状况计算个人的频率 所以通常我会使用 table age marital status 然而 每个人在数据采样后都有不同的权重 如何将其合并到我的频率表中 您可以使用函数svytable从包装中survey or wtd
  • 访问属性“H”的权限被拒绝

    我编写了下面的代码来使用java脚本捕获网页的整个屏幕截图 我在用着 火狐版本 49 0 1 铬版本 54 0 2840 59 m硒版本 3 0 0 OS Win10 64位Java 1 8 import java io File impo
  • 使用 Tor + Privoxy 抓取谷歌购物结果:如何避免被阻止?

    我已经安装了Tor Privoxy在我的服务器上 它们工作正常 已测试 但现在当我尝试使用urllib2 python 当然 使用代理来抓取谷歌购物结果 我总是被谷歌阻止 有时是503错误 有时是403错误 那么任何人有任何解决方案可以帮助
  • 使用socket.io/node.js在网页上显示流式twitter

    我正在尝试使用 node js socket io 和 twit 构建 Twitter 流式 Web 应用程序 var express require express app express http require http server
  • 用 X"" 测试空字符串[重复]

    这个问题在这里已经有答案了 我知道我可以在 Bash 中测试空字符串 z像这样 if z myvar then do stuff fi 但我看到很多代码都是这样写的 if X X myvar then do stuff fi 这种方法更便携
  • VS2008如何从Web Developer更改为C# Developer设置

    我刚刚重新安装了 vs2008 第一次运行时不小心选择了 Web Developer 而不是 C Developer 现在我习惯的所有键绑定都是错误的 如何将其更改为 C Developer 我尝试了 devenv resetsetting
  • URL Selenium 超出最大重试次数 [重复]

    这个问题在这里已经有答案了 因此 我希望遍历 URL 数组并打开不同的 URL 以使用 Selenium 进行网页抓取 问题是 一旦我点击第二个 browser get url 我就会收到 URL 超出最大重试次数 和 无法建立连接 因为目
  • Symfony2,原则 2:getResult 对象

    posts em gt find Application BlogBundle Entity Post 1 print r posts 为什么我得到了 Barii BlogBundle Entity Post Object id Barii
  • 欧拉计划#29

    嗯 解决了这个问题之后通过天真 的STL集 我正在阅读论坛条目 在那里我找到了这个条目 include
  • Java Swing JToolBar

    我创造了JToolBar Java 摇摆 我在框架上设置了一个背景图像 其中包含JToolBar 我想要我的JToolBar是透明的 以便保持在框架上的图像应该是可见的 我在用setOpaque false 但它对我的工具栏没有任何影响 以
  • 重置子元素的不透明度 - Maple 浏览器(三星电视应用程序)

    我在创建具有子元素的透明元素时遇到问题 使用此代码 子元素从父元素获取不透明度值 我需要将子元素的不透明度重置 设置为任意值 参考浏览器是Maple Browser for a Samsung TV Application video ca
  • 如何在material-ui中将焦点设置在MenuItem上

    我正在尝试以编程方式将焦点设置在 激活 material ui 中菜单组件内的菜单项之一上 我可以通过按 Tab 键手动执行此操作 但我需要以编程方式执行此操作以响应按键事件 menu menu
  • 如何在 Telerik ASP .NET MVC 网格上将布尔值从 true/false 转换为 yes/no

    我希望能够更改 ASP NET MVC 中不可编辑的 Telerik AJAX 网格上不可编辑列的显示值 有问题的列是一个布尔值 因此显示转换将为 Yes true 和 No False 我做了一些实验 发现这有效 不确定它是否会保留在可编
  • 从 Schittkowski DAE 测试套件中求解 PENDULUM2?

    我只是试图解决 Schittkowski DAE 测试套件中的 DAE 问题之一 http klaus schittkowski de mc dae htm http klaus schittkowski de mc dae htm 但没有
  • 如何以相同的方式修改或替换字典中的每个值?

    给定一个像这样的字典myDict ten 10 fourteen 14 six 6 如何修改每个值 例如 我想将每个值除以二 这样myDict变成 ten 5 fourteen 7 six 3 就位 而不是创建新字典 迭代键和值 for k
  • 检查 URL 的内容:是文件还是网页?

    我有一个应用程序 需要根据内容采取不同的操作URL 如果内容是文件 我需要下载它 但是 如果内容是网页 我需要打开它 据我所知 有两种 URL 类型 直接链接 例如 https dl ssl google com android repos
  • WPF 应用程序的多线程策略需要建议

    我正在构建一个单窗口 WPF 应用程序 窗口中是一个列表项 当然 它们保存在数据库中 我需要定期启动一个后台任务 从 Atom feed 更新数据库 当每个新项目添加到数据库中时 UI 中的列表也必须更新以反映这一点 我不希望这个后台任务减
  • 滑块输入延迟

    有没有办法使sliderInput http shiny rstudio com reference shiny latest sliderInput html等待几秒钟 然后它会更改其对应的input 多变的 我有一个栏正在控制需要根据值
  • 使用 Mac 应用程序部署 Qt 框架以及 otool 的使用

    我在使用我的 Mac 应用程序部署 Qt 框架时遇到问题 我希望有人能知道为什么当我在干净的 Mac 即不是开发人员 Mac 上运行该应用程序时会出现此错误 操作系统 10 7 2 并使用 XCode 错误消息 Library not lo