gpt4 book ai didi

xcode - 使用第三方框架分发 mac 应用程序(Xcode 4)

转载 作者:行者123 更新时间:2023-12-02 03:47:34 26 4
gpt4 key购买 nike

我在过去两天里做了很多研究,仅在这个网站上我就已经通读了至少 20 个成功回答的问题。这些解决方案似乎都不适合我。我在我的应用程序中使用了五个框架,在我的计算机上运行它没有问题。当我尝试在另一台计算机上运行该应用程序时,我在加载库时遇到错误。

Exception Type:  EXC_BREAKPOINT (SIGTRAP)
Exception Codes: 0x0000000000000002, 0x0000000000000000

Application Specific Information:
dyld: launch, loading dependent libraries

Dyld Error Message:
Library not loaded: /Users/USER/*/Allegro-5.0.framework/Versions/5.0.7/Allegro-5.0
Referenced from: /Volumes/VOLUME/Pong.app/Contents/MacOS/../Frameworks/AllegroMain-5.0.framework/AllegroMain-5.0
Reason: image not found

我已经完成了这些步骤:

  • 我有一个复制文件构建阶段,可以将框架复制到应用程序包中
  • 我已使用 install_name_tool 将安装路径更改为 @executable_path/../Frameworks
  • 我已将@executable_path/../Frameworks 设置为运行路径搜索路径
  • 框架链接到我的程序

看起来 dyld 成功加载了第一个框架(Allegro-5.0),但当它尝试加载第二个框架(AllegroMain-5.0)时认为它没有

附加信息:

  • 当前运行 OSX 10.7.5
  • Xcode 4.6 版

我的应用程序包的内容文件夹如下所示: Contents Screenshot

我的链接二进制文件与库和复制文件构建阶段: Xcode screenshot

我不确定我对错误原因的看法是否正确。我已经在 allegro.cc 上寻求帮助,但基本上被告知他们无法帮助我解决特定于框架的问题。如果能帮我解决这个问题,我将不胜感激!

编辑

我不确定这是否重要,但我仔细考虑了一下,我的标题搜索路径可能有问题。为了让应用程序运行,我必须为每个框架创建一个新的标题搜索路径。我目前设置了这五个单独的标题搜索路径:

 /Library/Frameworks/Allegro-5.0.framework/Versions/Current/Headers
/Library/Frameworks/AllegroMain-5.0.framework/Versions/Current/Headers
/Library/Frameworks/AllegroDialog-5.0.framework/Versions/Current/Headers
/Library/Frameworks/AllegroFont-5.0.framework/Versions/Current/Headers
/Library/Frameworks/AllegroTTF-5.0.framework/Versions/Current/Headers

我不确定 runpath 搜索路径是如何工作的;它会允许代码找到我的标题吗?错误消息似乎与此问题无关,但这是我想到的另一个想法。

更新 4/14

我做的事情搞砸了,因为我什至在我的电脑上也开始出现奇怪的行为。我重新安装了框架,但出现了新错误。

Exception Type:  EXC_BREAKPOINT (SIGTRAP)
Exception Codes: 0x0000000000000002, 0x0000000000000000

Application Specific Information:
dyld: launch, loading dependent libraries

Dyld Error Message:
Library not loaded: /opt/local/lib/libfreetype.6.dylib
Referenced from: /Volumes/VOLUME/Pong.app/Contents/MacOS/../Frameworks/AllegroTTF-5.0.framework/Versions/5.0.10/AllegroTTF-5.0
Reason: image not found

我的问题现在更笼统了:如果我将 libfreetype 与我的应用程序捆绑在一起,我该如何告诉框架在哪里可以找到它?

最佳答案

啊哈,我的应用程序现在可以在其他计算机上运行了!以下是我为解决问题而采取的步骤。

  • 尝试更改框架的 install_name,但我没有清楚地了解我在做什么,所以我一定是搞砸了。
  • 重新安装了所有框架以重新开始。
  • 这一次,我非常小心地更改了每个框架的安装名称

sudo install_name_tool -id [install_name] [path/to/framework]

  • 至此,所有的框架都加载成功了,但是他们仍然试图在/opt/local/lib中找到他们的依赖
  • 我将依赖项添加到复制文件构建阶段,以便将它们包含在应用程序包中
  • 最后,我再次使用安装名称工具来更改依赖项的搜索路径。

sudo install_name_tool -change [/old/path/to/library] [/new/path/to/library] [path/to/dependent/framework]

例如:对于导致我最初问题中最后一个错误的 libfreetype.6.dylib 依赖项,我使用了以下终端命令。

sudo install_name_tool -change/opt/local/lib/libfreetype.6.dylib @executable_path/../Frameworks/libfreetype.6.dylib/Library/Frameworks/AllegroTTF-5.0.framework/Versions/5.0.10/AllegroTTF -5.0


据我所知,我遇到的大部分问题都是由于我试图盲目地遵循在回答类似但略有不同的问题时给出的终端命令造成的。

事实证明,阅读一些文档是解决这个问题的关键,与尝试分发我的应用程序之前相比,我现在对框架和库的工作原理有了更多的了解。

谢谢你,Stack Overflow。

关于xcode - 使用第三方框架分发 mac 应用程序(Xcode 4),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15983730/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com