SDL导致未定义的符号:“_ main”,引用自:crt1.10.5.o中的start

时间:2010-02-24 22:48:26

标签: c++ sdl linker-errors

当我尝试在我的c ++程序中使用SDL时,我得到以下内容:

> g++ minimal.cpp SDLMain.m
Undefined symbols:
  "_main", referenced from:
      start in crt1.10.5.o
ld: symbol(s) not found
collect2: ld returned 1 exit status

这是我的minimal.cpp:

#include <SDL/SDL.h>
int main(int argc, char **argv) {
    return 0;
}

我可以从http://www.libsdl.org/faq.php?action=listentries&category=7收集到的是,通过包含SDL.h,它通过一些宏魔法重命名我的主要功能。但是,SDLMain.m应该通过调用重命名的函数再次使事情变得正确。但不知怎的,这种情况没有发生?

我正在运行Leopard。

请注意,这是与问题550455不同的问题。

3 个答案:

答案 0 :(得分:3)

您也可以使用SDL sdl-config提供的工具:

gcc sdltest.c -o sdltest `sdl-config --cflags --libs`

答案 1 :(得分:2)

解决方案是使用SDL主页中SDL-devel-1.2.14-extras.dmg中包含的SDLMain.m文件。出于某种原因,我之前使用的那个神秘地停止了工作。这是我的工作编译命令:

g++ -framework SDL -framework Cocoa -I/usr/local/include/SDL/ minimal.cpp "/Library/Application Support/Developer/Shared/Xcode/Project Templates/SDL Application/SDLMain.m"

答案 2 :(得分:0)

<强>配置: OSX 10.10.5 XCODE 7.0 SDL 1.2.15

如何重现:

  1. 将SDL.Framework复制到/ Library / Frameworks,如readme.txt中所述

  2. 关于XCODE模板&gt;建筑设置&gt;框架搜索路径为/ Library / Frameworks

  3. 我在main.cpp文件中包含了SDL框架,如下所示:

    #include&lt; SDL / SDL.h&gt;

  4. 然后我在XCODE上加载SDL Framework时遇到同样的问题,因为类main的双重声明阻止了编译。

    这是错误消息:

    Undefined symbols for architecture x86_64:
      "_main", referenced from:
         implicit entry/start for main executable
         (maybe you meant: _SDL_main)
    

    这是我如何解决的:

    我检查过,发现SDL.h包含以下所有文件:

    #include "SDL_main.h"
    #include "SDL_stdinc.h"
    #include "SDL_audio.h"
    #include "SDL_cdrom.h"
    #include "SDL_cpuinfo.h"
    #include "SDL_endian.h"
    #include "SDL_error.h"
    #include "SDL_events.h"
    #include "SDL_loadso.h"
    #include "SDL_mutex.h"
    #include "SDL_rwops.h"
    #include "SDL_thread.h"
    #include "SDL_timer.h"
    #include "SDL_video.h"
    #include "SDL_version.h"
    
    #include "begin_code.h"
    

    其中一个是SDL_main.h,我们在该文件中看到:

    #define main    SDL_main
    

    这一行与main.cpp上的类main产生冲突,在SDL_main.h上注释该行或在SDL.h上注释#include“SDL_main.h”行解决了这个问题。 我是C ++的菜鸟(我刚刚在大学学习很多年)但是从其他语言我知道“黑客”一个库是一个非常糟糕的做法...虽然它似乎是MAXOSX的特殊兼容性问题我真的想用XCODE ......

    请正确和评论,证明是或否,因为我正处于学习过程中。

    干杯!