我正在Mac OS X上构建一个使用SDL的游戏。但是,SDL.framework 表现出特殊的行为。
如果/Library/Framework 以及应用程序包中存在 SDL.framework,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 中实现。将使用两者之一。哪一个是未定义的。 objc[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中实现。将使用两者之一。哪一个是未定义的。
然后游戏在第一个SDL_PollEvent处以EXC_BAD_ACCESS符号继续崩溃。
如果 SDL.framework 仅存在于应用程序包中(或根本不存在),则游戏将拒绝启动。
如果 SDL.framework 仅存在于/Library/Framework 中,则游戏运行没有问题。
这仅适用于 SDL.framework,不适用于我在项目中使用的其他 SDL 衍生产品(SDL_image、SDL_mixer 等)。
看看这篇文章:在 Mac App Bundle 中嵌入框架
更改
运行路径搜索路径"生成设置为"@loader_path/../框架"
正如建议的那样,从我的输出中删除了该消息,并且还允许它在我的/Library/Frameworks文件夹中没有SDL.framework的情况下运行。