无法在XCode4中链接SDL!

4

我非常沮丧!今晚我试图适应SDL,但是在通过XCode4链接到它时遇到了难题!这是我的做法。我下载了SDL框架运行库和开发工具包的v1.2.14版本。我按照所有说明操作(将SDL.framework拖放到/Library/Frameworks中),直到我意识到模板在XC4中不像在XC3.x中那样工作。我放弃了模板,尝试将框架添加到一个vanilla cocoa应用程序中。(从内置应用程序模板创建。)我添加了SDLMain .h .m和.nib文件,并尝试构建。立即出现错误,说找不到“SDL.h”。我手动调整了所有配置的头文件搜索路径设置,虽然我认为如果直接引用框架就不需要这样做。我以这种方式解决了缺少的头文件问题,但开始出现链接器错误。

"_SDL_main", referenced from:
      -[SDLMain applicationDidFinishLaunching:] in SDLMain.o

我已经尝试了所有不同的方式来满足我的链接器和编译器。我将框架移动到了我的用户文件夹下的~/Library/Frameworks,我玩弄了<>和""导入语法。我开始了一个全新的项目并重复了所有步骤。我很迷茫!有人能帮忙吗?


你的 main() 函数接受两个参数吗? - genpfault
1
是的,它有:int main (int argc, char **argv) - Cliff
哇,我发布问题后就忘记了我在哪里或为什么发布它们!我甚至在尝试什么???哦,对了,是为了iOS的StarControl。我阅读了源代码并开了一个与主题无关的玩笑... - Cliff
2个回答

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不要再重命名我的函数了!肯定有更好的解决方案,但是现在这样也可以。

2
我不知道你是否还在寻找这个答案,但我认为问题出在SDL正在查找一个C语言符号名称,而你的main函数是在一个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
 */

谢谢,完全明白,虽然我还没有回去再试一次。感谢你的提示! :) - Cliff

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接