【问题标题】:Simply including SDL header causes linker error简单地包含 SDL 标头会导致链接器错误
【发布时间】:2011-10-27 16:04:20
【问题描述】:

我打算将我的游戏从 glut 迁移到 sdl。

它在 glut 中运行良好,但我想使用一些 sdl 功能。

所以我进入我的项目属性,在目标标题下单击将要编译的程序,构建阶段,将二进制文件与库链接,添加 SDL.framework

与我对 OpenGL.framework 和 GLUT.framework 所做的完全相同

但是,当我添加:#include <SDL/SDL.h> 时,我尝试构建时出现链接器错误:

Undefined symbols for architecture x86_64:
  "_main", referenced from:
      __start in crt1.o
     (maybe you meant: _SDL_main)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

谷歌搜索只会导致相当少的结果,但没有真正的解释。

【问题讨论】:

    标签: c++ macos opengl xcode4 sdl


    【解决方案1】:

    SDL 使用宏来重命名您的main(..),并且应该提供自己的宏,通常在SDLmain.m 中实现。它应该与 SDL.framework 一起提供。

    当您从此处http://www.libsdl.org/download-1.2.php 下载框架时,请阅读devel-lite 文件夹中的ReadMeDevLite.txt

    另一种描述 http://www.meandmark.com/sdlopenglpart2.html

    【讨论】:

    • 我对基于 Mac 的开发相当陌生,甚至不确定 .m 文件是什么,你能解释一下我将如何整理这些东西吗?
    • @Blam,一个 .m 文件是一个 Objective-C 文件。 Mac 版本的 SDL 是用 Objective-C 编写的。将文件 SDLMain.h 和 SDLMain.m 添加到您的项目中。它们包含在 Mac OS X 上编译 SDL 应用程序所需的胶水代码。
    【解决方案2】:

    我发现当我收到错误时:

    架构 x86_64 的未定义符号:
    “_main”,引用自:
    主可执行文件的隐式入口/启动
    (也许你的意思是:_SDL_main)

    我忘记进入项目 -> 构建阶段 -> 编译源并将 SDLMain.m 添加到列表中。这立即为我解决了问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-10
      • 2021-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-10
      相关资源
      最近更新 更多