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