过去两天我做了很多研究,我必须在这个网站上至少阅读过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
我已经完成了以下步骤:
看起来dyld成功加载了第一个框架(Allegro-5.0),但认为它没有尝试加载第二个框架(AllegroMain-5.0)
其他信息:
我的应用程序包的内容文件夹是什么样的: 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与我的应用程序捆绑在一起,我怎么能告诉框架在哪里找到它?
答案 0 :(得分:1)
啊哈,我的应用程序现在在其他计算机上运行!以下是我采取的解决问题的步骤。
sudo install_name_tool -id [install_name] [path / to / framework]
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。
答案 1 :(得分:0)
您需要更改与其他框架交叉引用的框架中的安装路径。
在这种情况下,您需要将AllegroMain-5.0.framework中“/Users/USER/*/Allegro-5.0.framework/Versions/5.0.7/Allegro-5.0”的安装路径更改为“@ executable_path / .. /Frameworks/Allegro-5.0.framework/Versions/5.0.7/Allegro-5.0" 。
在使用Qt打包应用程序构建时遇到了类似的问题。
示例:QtGui.framework引用QtCore.framework。
name_tool="/Applications/Xcode.app/Contents/Developer/usr/bin/install_Name_tool"
cd "$APPNAME.app/Contents"
$name_tool -change /Users/USERNAME/QtSDK/Desktop/Qt/474/gcc/lib/QtCore.framework/Versions/4/QtCore @executable_path/../Frameworks/QtCore.framework/Versions/4/QtCore ./Frameworks/QtGui.framework/Versions/4/QtGui