1

我正在使用 SDL 的 Mac OS X 上构建游戏。但是,SDL.framework 表现出特殊的行为。

如果 SDL.framework 存在于 /Library/Frameworks 以及应用程序包中,GDB 会吐出以下内容:

objc[40787]:SDLTranslatorResponder 类在 /Users/Hinchy/Library/Developer/Xcode/DerivedData/Here_Comes_Launchman-abjymmujvjzdemcsrkkcmonahuva/Build/Products/Debug/Here Comes Launchman.app/Contents/MacOS/../Frameworks/SDL 中实现.framework/Versions/A/SDL 和 /Library/Frameworks/SDL.framework/Versions/A/SDL。将使用两者之一。哪一个是未定义的。objc [40787]:类 SDL_QuartzWindow 在 /Users/Hinchy/Library/Developer/Xcode/DerivedData/Here_Comes_Launchman-abjymmujvjzdemcsrkkcmonahuva/Build/Products/Debug/Here Comes Launchman.app/Contents/MacOS/../Frameworks/SDL 中实现.framework/Versions/A/SDL 和 /Library/Frameworks/SDL.framework/Versions/A/SDL。将使用两者之一。哪一个是未定义的。对象 [40787]: SDL_QuartzWindowDelegate 类在 /Users/Hinchy/Library/Developer/Xcode/DerivedData/Here_Comes_Launchman-abjymmujvjzdemcsrkkcmonahuva/Build/Products/Debug/Here Comes Launchman.app/Contents/MacOS/../Frameworks/SDL.framework/Versions/ 中都实现了A/SDL 和 /Library/Frameworks/SDL.framework/Versions/A/SDL。将使用两者之一。哪一个是未定义的。objc[40787]:类 SDL_QuartzView 在 /Users/Hinchy/Library/Developer/Xcode/DerivedData/Here_Comes_Launchman-abjymmujvjzdemcsrkkcmonahuva/Build/Products/Debug/Here Comes Launchman.app/Contents/MacOS/../Frameworks/SDL 中实现.framework/Versions/A/SDL 和 /Library/Frameworks/SDL.framework/Versions/A/SDL。将使用两者之一。哪一个是未定义的。/Frameworks/SDL.framework/Versions/A/SDL 和 /Library/Frameworks/SDL.framework/Versions/A/SDL。将使用两者之一。哪一个是未定义的。objc[40787]:类 SDL_QuartzView 在 /Users/Hinchy/Library/Developer/Xcode/DerivedData/Here_Comes_Launchman-abjymmujvjzdemcsrkkcmonahuva/Build/Products/Debug/Here Comes Launchman.app/Contents/MacOS/../Frameworks/SDL 中实现.framework/Versions/A/SDL 和 /Library/Frameworks/SDL.framework/Versions/A/SDL。将使用两者之一。哪一个是未定义的。/Frameworks/SDL.framework/Versions/A/SDL 和 /Library/Frameworks/SDL.framework/Versions/A/SDL。将使用两者之一。哪一个是未定义的。objc[40787]:类 SDL_QuartzView 在 /Users/Hinchy/Library/Developer/Xcode/DerivedData/Here_Comes_Launchman-abjymmujvjzdemcsrkkcmonahuva/Build/Products/Debug/Here Comes Launchman.app/Contents/MacOS/../Frameworks/SDL 中实现.framework/Versions/A/SDL 和 /Library/Frameworks/SDL.framework/Versions/A/SDL。将使用两者之一。哪一个是未定义的。SDL_QuartzView 类在 /Users/Hinchy/Library/Developer/Xcode/DerivedData/Here_Comes_Launchman-abjymmujvjzdemcsrkkcmonahuva/Build/Products/Debug/Here Comes Launchman.app/Contents/MacOS/../Frameworks/SDL.framework/Versions/ 中实现A/SDL 和 /Library/Frameworks/SDL.framework/Versions/A/SDL。将使用两者之一。哪一个是未定义的。SDL_QuartzView 类在 /Users/Hinchy/Library/Developer/Xcode/DerivedData/Here_Comes_Launchman-abjymmujvjzdemcsrkkcmonahuva/Build/Products/Debug/Here Comes Launchman.app/Contents/MacOS/../Frameworks/SDL.framework/Versions/ 中实现A/SDL 和 /Library/Frameworks/SDL.framework/Versions/A/SDL。将使用两者之一。哪一个是未定义的。

然后游戏继续在第一个 SDL_PollEvent 处以 EXC_BAD_ACCESS 符号崩溃。

如果 SDL.framework 仅存在于应用程序包中(或根本不存在),则游戏根本拒绝启动。

如果 SDL.framework 仅存在于 /Library/Frameworks 中,则游戏可以正常运行。

适用于 SDL.framework,而不适用于我在项目中使用的其他 SDL 衍生产品(SDL_image、SDL_mixer 等)。

4

1 回答 1

0

查看这篇文章: 在 Mac App Bundle 中嵌入框架

改变

运行路径搜索路径”构建设置为“@loader_path/../Frameworks”

正如建议的那样,从我的输出中删除了该消息,并且还允许它在我的 /Library/Frameworks 文件夹中没有 SDL.framework 的情况下运行。

于 2012-10-25T03:52:37.317 回答