我非常沮丧!今晚我试图让SDL适应环境,但我试图通过XCode4链接到它的砖墙!这就是我做的。我下载了SDL框架运行时库和开发xtras的v1.2.14。我按照所有指示(拖放/ Library / Frameworks中的SDL.framework)直到我意识到模板在XC4中不像以前那样在XC3.x中工作。我对模板进行了抨击,并尝试将框架添加到vanilla cocoa应用程序中。 (从内置的应用程序模板创建。)我添加了SDLMain .h .m和.nib文件并尝试构建。我立刻得到一个错误,说找不到“SDL.h”。我为所有配置手动调整了我的标题搜索路径设置,虽然我认为如果我直接引用框架这不应该是必要的。我以这种方式绕过了丢失的头文件,但开始遇到链接器错误。
"_SDL_main", referenced from:
-[SDLMain applicationDidFinishLaunching:] in SDLMain.o
我已经尝试过满足我的链接器和编译器的所有不同的演绎。我已经将框架移动到了〜/ Library / Frameworks下的用户文件夹中,我玩弄了两个<>和“”导入语法。我已经开始了一个全新的项目并重复了一切。我迷路了!有人可以帮忙吗?
答案 0 :(得分:5)
我知道这已经过时了但如果现在有人绊倒了。
默认情况下,XCode使用声明
创建主函数int main(int argc, const char * argv[])
虽然SDL正在寻找声明
的功能int main(int argc, char * argv[])
请注意char * argv []中缺少const。似乎当SDL正在寻找一个char * []时,Xcode会给它一个const char * [],并导致它无法找到符号。
我真的希望SDL停止重命名我的功能!必须有一个更好的解决方案,但是,嘿,现在这样做。
答案 1 :(得分:2)
我不知道您是否还在寻找,但我认为这是因为SDL正在寻找C符号名称,但您的主要是在C ++文件中声明。
你必须这样做:
extern "C" int main(int argc, char *argv[])
{
...
}
它在SDL_main.h中“记录”:
/** The application's main() function must be called with C linkage,
* and should be declared like this:
* @code
* #ifdef __cplusplus
* extern "C"
* #endif
* int main(int argc, char *argv[])
* {
* }
* @endcode
*/