为什么我不能使用C ++在Mac上为x86_64编译SDL?

时间:2012-11-21 01:19:50

标签: c++ xcode sdl codeblocks

我正在运行Mac Mini,2012年末(最新),64位,英特尔酷睿i7 2.3 gHz超线程x86_64,或者说是我的电脑。我现在也在使用Code :: blocks,因为Xcode(我更喜欢)的帮助更加稀疏,因为我使用的是C ++。也就是说,选择的编程语言是C ++,最终会扩展到Objective-C ++,但那是另一天。

问题在于:我正在尝试编译一个程序,我将不太确定它是什么(这是一个模板,现在让我们说这是一个游戏。)使用SDL 1.2.15,我有在我的Mac上从源代码编译。 (我确实尝试过使用SDLmain.m和SDL.h,但是这里充满了Objective-C代码,因为我没有找到关于我是否可以在互联网上用C ++编写代码的好信息,我放弃了。)我编译的源代码似乎工作正常,Code :: Blocks可以编译它的教程就好了,它运行正常。但是,我似乎无法让我的游戏模板工作。它编译很好,没有错误或警告,但链接器不会这样做。现在,我真的不确定ld做了什么,我只知道它将代码链接在一起。 (任何人都想详细说明吗?)当Code :: Blocks进入链接步骤时,它会失败并显示以下消息:

-------------- Clean: Debug in PyroLauncher ---------------

Cleaned "PyroLauncher - Debug"

-------------- Build: Debug in PyroLauncher ---------------

Compiling: App.cpp
Compiling: OnCleanup.cpp
Compiling: OnEvent.cpp
Compiling: OnInit.cpp
Compiling: OnLoop.cpp
Compiling: OnRender.cpp
Linking console executable: bin/Debug/PyroLauncher
Undefined symbols for architecture x86_64:
  "_SDL_GetError", referenced from:
      App::OnInit()     in OnInit.o
  "_SDL_Init", referenced from:
      App::OnInit()     in OnInit.o
  "_SDL_PollEvent", referenced from:
      App::OnExecute()     in App.o
  "_SDL_Quit", referenced from:
      App::OnCleanup()     in OnCleanup.o
  "_SDL_SetVideoMode", referenced from:
      App::OnInit()     in OnInit.o
  "_main", referenced from:
      start in crt1.10.6.o
     (maybe you meant: _SDL_main)
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
Process terminated with status 1 (0 minutes, 0 seconds)
0 errors, 0 warnings

让我严重困惑。我只知道ld找不到我的原生架构x86_64。如果有人可以帮助我,我将不胜感激。 我认为解决方案可能是:(但我不知道如何做到这一点。) SDL不是针对64位编译的,因此无法使用64位代码进行编译。 SDL是为Objective-C编译的,因此不能与C ++中的代码一起使用。 我的代码是32位,SDL是64位,它们不兼容。

2 个答案:

答案 0 :(得分:1)

你明白这里发生了什么吗?您的代码正在调用链接器(ld)找不到的函数。

两个主要概率是您需要在项目中包含更多文件,或者需要定义一些宏。

在项目中搜索SDL_GetError()(和其他人)的定义。如果你没有找到它,那么你需要找到声明它的文件并包含它。

如果找到它,那么它可能会被#ifdef XXXX包围,您必须在项目选项中定义xxxx(不在您的代码中)。大多数好的IDE(我使用NetBeans,使用Cygwin进行C +开发)会使ifdef的内容变灰(如果没有定义),所以你可以自觉地看看是否是这种情况。

顺便说一下,浏览SDL网站了解安装说明。或者,您的下载可能有一个名为“Install”或“Ins​​tall.txt”的文件,也可能有一个Makefile。如果是,则在IDE中从现有的makefile中查找选项Project / New ....

希望这有帮助。

答案 1 :(得分:0)

您需要将文件SDLMain.m和SDLMain.h添加到项目中。 SDLMain文件包含粘合代码,因此SDL代码可以在Mac OS X上运行。您还需要将Cocoa框架链接到您的项目。 Mac版的SDL是用Cocoa编写的,所以你需要链接到Cocoa。链接Cocoa框架不会强迫您使用Objective-C。你可以用C ++编写游戏。

如果您正在寻找有关使用Xcode 4设置SDL的信息,请阅读以下文章:

Using SDL with Xcode 4