我正在使用 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 等)。