当我尝试在我的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不同的问题。
答案 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
如何重现:
将SDL.Framework复制到/ Library / Frameworks,如readme.txt中所述
关于XCODE模板&gt;建筑设置&gt;框架搜索路径为/ Library / Frameworks
我在main.cpp文件中包含了SDL框架,如下所示:
#include&lt; SDL / SDL.h&gt;
然后我在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 ......
请正确和评论,证明是或否,因为我正处于学习过程中。
干杯!