2

我在 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 位的,它们不兼容。

4

2 回答 2

1

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

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

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

如果你确实找到了它,那么它可能会被包围#ifdef XXXX,你必须xxxx在你的项目选项中定义(而不是在你的代码中)。ifdef大多数优秀的 IDE(我使用 NetBeans,使用 Cygwin 进行 C+ 开发)如果未定义an 的 then 内容,则会将其显示为灰色,因此您可以立即查看是否是这种情况。

顺便说一句,请查看 SDL 网站以获取安装说明。或者,您的下载文件可能有一个名为“Install”或“Ins​​tall.txt”的文件,也可能有一个 Makefile。如果是这样,那么在您的 IDE 中从现有的 makefile 中查找选项 Project/New ...。

希望这可以帮助。

于 2012-11-21T01:36:37.073 回答
0

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

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

在 Xcode 4 中使用 SDL

于 2012-11-21T20:07:00.610 回答