2010-02-24 37 views
4

当我尝试使用SDL在我的C++程序时,我得到如下:SDL导致未定义的符号:“_main”,从引用:开始crt1.10.5.o

> 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.

回答

2

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

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

非常感谢你分享这个! <3 <3 <3 – 2011-03-29 06:46:32

3

您还可以通过SDL SDL-配置使用所提供的工具

如何重现:

  1. 复制SDL.Framework /资源库/框架上的readme.txt

  2. 解释在XCODE模板>建筑设置>框架搜索路径为/库/框架

  3. 我包括SDL框架上的main.cpp文件,如下所示:

    的#include <SDL/SDL.h>

然后我有同样的问题LOADI在XCODE上使用SDL Framework时,由于阻止编译的class 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++的noob(我刚刚在多年前在大学学习它),但是从其他语言我知道“黑客入侵”库是一个非常糟糕的做法......虽然它似乎是与MAXOSX的特定兼容性问题我真的想使用XCODE ...

请纠正和评论,证明是或否,因为我在学习过程。

干杯!

0

配置: OSX 10.10.5 XCODE 7.0 SDL 1.2.15

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

谢谢!这已经很长时间了,我甚至不记得问这个问题,但是希望你的答案对别人有帮助。 – Bemmu 2015-10-01 11:03:30

+0

在'#include '之后的main.cpp中,实现你所做的一些更简单的方法将是'#undef main'。我认为适当的SDL解决方案是通过链接器命令行中的'-lSDLmain'或其SDLMain.m来包含它们的主函数。 – Raptor007 2017-04-26 01:52:12

相关问题