为什么我无法使用 C++在 Mac 上编译 SDL 以进行x86_64?

Why can't I compile SDL on Mac for x86_64 using C++?

本文关键字:SDL x86 编译 Mac C++ 为什么      更新时间:2023-10-16

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

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

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

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

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

顺便说一下,请查看 SDL 网站以获取安装说明。或者,您的下载可能包含一个名为"安装"或"安装.txt"的文件,也可能具有生成文件。如果是这样,则在IDE中查找选项"项目/新建...从现有的生成文件。

希望这有帮助。

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

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

将 SDL 与 Xcode 4 结合使用