我有一个用于构建我的软件的系统,使用 makefile 和命令行工具。
我已经能够轻松地修改 makefile 以支持我的 Mac(现在是 10.7.4),所以我试图让我的代码独立于 XCode 工作。一旦我开始将东西移植到 iOS,我就会处理 XCode。我希望 makefile 解决方案(虽然我的代码库仍可由所述 makefile 管理)允许我更好地选择可移植性和自动化。
我所经历的正是所描述的here .代码编译通过,运行时遇到问题。
起初我使用的是 SDL 站点上二进制下载的 SDL 框架 (-framework SDL
),所以我想我可以通过从源代码正确构建 SDL 来解决问题。我已完成此操作,现在正在链接到 libSDL.a
和 libSDLMain.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
,包含在 libSDLmain
或 SDLMain.m
中,进行必要的 Mac 特定准备,然后调用 SDL_main
.
关于c++ - 使用 C++ 入口点让 SDL 在 OSX 上工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10965395/