sdl 目标 c++ 和 xcode 在游戏中包含 sdl 框架

Posted

技术标签:

【中文标题】sdl 目标 c++ 和 xcode 在游戏中包含 sdl 框架【英文标题】:Sdl objective c++ and xcode include sdl framework in game 【发布时间】:2013-01-15 12:29:37 【问题描述】:

我正在使用目标 C++ 在 xcode 中编写我的第一个 SDL 游戏。 该程序在我的计算机上运行良好,但我试图在应用程序中包含该框架,以便它可以在其他 Mac 上播放而无需安装它。

我已将框架设置为复制,然后在应用程序构建阶段链接到二进制文件。

每次我在另一台 Mac 上运行应用程序时都会收到以下错误消息:

流程:迷宫 [2911] 路径:/Users/USER/Desktop/Maze.app/Contents/MacOS/Maze 标识符:LKW.Maze 版本:1 (1) 代码类型:X86-64(本机) 父进程:launchd [2811] 日期/时间:2013-01-14 12:50:54.126 +1100 操作系统版本:Mac OS X 10.7.5 (11G63b) 报告版本:9 自上次报告以来的间隔:60055 秒 自上次报告以来的崩溃次数:11 自上次报告以来的每个应用程序崩溃:6 匿名 UUID:9FDDFA61-468F-4EE5-B922-EE167A9E7DF7 崩溃的线程:0 异常类型:EXC_BREAKPOINT (SIGTRAP) 异常代码:0x0000000000000002、0x0000000000000000 应用特定信息: dyld:启动,加载依赖库 Dyld 错误消息: 未加载库:@rpath/SDL.framework/Versions/A/SDL 引用自:/Users/USER/Desktop/Maze.app/Contents/MacOS/Maze 原因:图片未找到 二进制图像: 0x10ed3c000 - 0x10ed41fff +LKW.Maze (1 - 1) 5364749AEDEB> /Users/USER/Desktop/Maze.app/Contents/MacOS/Maze 0x7fff6e93c000 - 0x7fff6e970baf dyld (195.6 - ???) /usr/lib/dyld 0x7fff8ba34000 - 0x7fff8bd4dfff com.apple.Foundation (6.7.2 - 833.25) /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation 0x7fff94742000 - 0x7fff94742fff com.apple.Cocoa (6.6 - ???) /System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa

型号:MacBook7,1,BootROM MB71.0039.B0E,2 个处理器,Intel Core 2 Duo,2.4 GHz,2 GB,SMC 1.60f5 显卡:NVIDIA GeForce 320M、NVIDIA GeForce 320M、PCI、256 MB 内存模块:BANK 0/DIMM0, 1 GB, DDR3, 1067 MHz, 0x80CE, 0x4D34373142323837334648532D4346382020 内存模块:BANK 1/DIMM0, 1 GB, DDR3, 1067 MHz, 0x80CE, 0x4D34373142323837334648532D4346382020 AirPort:spairport_wireless_card_type_airport_extreme (0x14E4, 0x93), Broadcom BCM43xx 1.0 (5.106.198.19.22) 蓝牙:版本 4.0.8f17,2 个服务,18 个设备,1 个传入串口 网络服务:AirPort、AirPort、en1 串行 ATA 设备:日立 HTS545025B9SA02,250.06 GB 串行 ATA 设备:HL-DT-ST DVDRW GS23N USB 设备:内置 iSight、apple_vendor_id、0x8507、0x24600000 / 2 USB 设备:BRCM2070 集线器、0x0a5c (Broadcom Corp.)、0x4500、0x06600000 / 3 USB 设备:蓝牙 USB 主机控制器、apple_vendor_id、0x8218、0x06630000 / 5 USB 设备:Apple 内部键盘/触控板、apple_vendor_id、0x0236、0x06300000 / 2

编辑: SDL 框架位于应用程序包中的 Contents > Frameworks 中。 我已经尝试过亚当的解决方法。 我已将 @executable_path/contents/framworks 包含在框架搜索路径中。 我都试过了

#include "SDL/SDL.h" 
and 
#include <SDL/SDL.h>

【问题讨论】:

看起来像是运行时崩溃。在调试器中运行您的程序,它会告诉您在哪里程序崩溃了,让您查看并遍历函数调用堆栈,以便了解您是如何结束崩溃的,还可以让您检查变量以帮助您了解为什么它崩溃了。 可能重复:***.com/questions/1621451/… 【参考方案1】:

检查 SDL 框架是否已复制到游戏的应用程序包中。从 Finder 中选择应用程序,右键单击并选择 Show Package Contents。如果正确复制,SDL 框架应该位于应用程序包的 Contents > Frameworks 中。

如果 SDL 框架未复制到应用程序包,您可以在以下文章中找到有关如何将 SDL 框架复制到应用程序包的说明:

Using SDL with Xcode 4

请务必阅读文章中 Adam 的评论,因为如果按照文章中的说明无法将 SDL 框架复制到应用程序包,他的评论包含解决方法。

【讨论】:

以上是关于sdl 目标 c++ 和 xcode 在游戏中包含 sdl 框架的主要内容,如果未能解决你的问题,请参考以下文章

Copy Bundle Resources 构建阶段在 xcode 6 中包含此目标的 Info.plist 文件“Info.plist”吗?

如何在 Xcode 中包含 <bits/stdc++>

在 Xcode 静态库中包含框架?

我应该在“架构”部分的Xcode构建设置中包含哪些内容

如何在 XCode 3.2.5 项目中包含 Scintilla?

如何在 CMake 项目中包含外部库