5

当我尝试在我的 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 不同的问题。

4

3 回答 3

5

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

gcc sdltest.c -o sdltest `sdl-config --cflags --libs`
于 2011-09-06T04:30:59.033 回答
3

解决方案是使用 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"
于 2010-02-25T02:07:34.467 回答
1

配置: OSX 10.10.5 XCODE 7.0 SDL 1.2.15

如何重现:

  1. 按照 readme.txt 中的说明将 SDL.Framework 复制到 /Library/Frameworks

  2. 在 XCODE 模板 > 构建设置 > 框架搜索路径为 /Library/Frameworks

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

    #include <SDL/SDL.h>

然后我在 XCODE 上加载 SDL 框架时遇到了同样的问题,因为 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...

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

干杯!

于 2015-09-30T09:30:05.967 回答