无法链接到XCode4中的SDL!

时间:2011-05-27 05:05:49

标签: macos xcode4 sdl

我非常沮丧!今晚我试图让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下的用户文件夹中,我玩弄了两个<>和“”导入语法。我已经开始了一个全新的项目并重复了一切。我迷路了!有人可以帮忙吗?

2 个答案:

答案 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
 */