c++ - 使用 C++ 入口点让 SDL 在 OSX 上工作

标签 c++ objective-c macos opengl sdl

我有一个用于构建我的软件的系统,使用 makefile 和命令行工具。

我已经能够轻松地修改 makefile 以支持我的 Mac(现在是 10.7.4),所以我试图让我的代码独立于 XCode 工作。一旦我开始将东西移植到 iOS,我就会处理 XCode。我希望 makefile 解决方案(虽然我的代码库仍可由所述 makefile 管理)允许我更好地选择可移植性和自动化。

我所经历的正是所描述的here .代码编译通过,运行时遇到问题。

起初我使用的是 SDL 站点上二进制下载的 SDL 框架 (-framework SDL),所以我想我可以通过从源代码正确构建 SDL 来解决问题。我已完成此操作,现在正在链接到 libSDL.alibSDLMain.a。这反过来又要求我包含这些额外的框架才能成功编译(我根据 sdl-config --static-libs 的输出得出了列表:

-framework Cocoa -framework IOKit -framework AudioToolbox -framework AudioUnit -framework Carbon -framework ApplicationServices 

但是我仍然有同样的问题,文章解释说这与缺少这个有关:

[NSApplication sharedApplication];

我的代码没有 Obj-C 代码。不过,我很乐意将一些 Obj-C 插入其中。我添加了其中一个包附带的 SDLMain.m,但链接器有问题:ld: duplicate symbol _main

好吧,所以我不会那么容易就逃脱。

我缺少的让我初始化 NSApplication 的小部分是什么?有没有办法在没有单独的源文件(来 self 的 Main.cpp)的情况下做到这一点,现在必须是 Obj-C?是否有一些 C/C++ 包装器函数可以调用 sharedApplication

最佳答案

如果您链接 libSDLmain,或包含 SDLMain.m,您的入口点必须改为命名为 SDL_main:

extern "C" int SDL_main(int argc, char **argv)
{
}

(extern "C" 考虑到您使用的是 C++。)

“真正的”main,包含在 libSDLmainSDLMain.m 中,进行必要的 Mac 特定准备,然后调用 SDL_main.

关于c++ - 使用 C++ 入口点让 SDL 在 OSX 上工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10965395/

相关文章:

macos - OSX 中的问题 "using ls -al --full-time"

android - 将 Qt 网络功能与不同 OpenSSL 版本一起使用

c++ - cpp 文件 #include 导致错误,@class 不

c++ - 将 char * 作为函数参数传递时出现意外行为

iphone、ipad VGA 外部显示器 - tvOutManager

ios - 获取控件结束位置的 x/y 帧坐标

git - 子模块和 'git pull --rebase'

c++ - 在给定位置线程问题后插入函数

c++ - 在带有整数的控制台中显示无关紧要的数字

ios - NSDate、NSDateFormatter 的奇怪行为