1

今天早上我在使用 Sublime Text 和 Terminal 学习了 C++ 一段时间以使用 SDL 之后安装了 OSX Lion 和 Xcode,但是我在尝试在 Terminal 中编译时遇到了一些问题,这是我的代码。

#include "SDL/SDL.h"

int main(int argc, char* args[])
{
    //Start SDL
    SDL_Init(SDL_INIT_EVERYTHING);

    //Quit SDL
    SDL_Quit();

    return 0;
}

我将 SDL.framework、SDL_mixer.framework 和 devel-lite 放入我的 Library 文件夹中,然后在不起作用时使用 Macports 获取 SDL,后者没有帮助。

当我使用 'g++ sdltest.cpp -o sdltest -lSDL' 时,我得到以下结果 - 'ld: library not found for -lSDLcollect2: ld returned 1 exit status'。有什么办法可以让这个工作吗?

另外,出于兴趣,如果我在格式化硬盘并重新安装 OSX Lion 和 XCode(我正在考虑很快这样做)之后对 SDL 进行“全新安装”,那么最好的方法是什么?我发现的所有指南都遇到了错误(这对我来说绝对是个问题,我只需要找到最容易理解的指南),其中很多似乎是针对使用 Xcode 而不是一个文本编辑器和终端。谢谢你。

4

2 回答 2

3

您应该使用包含的 sdl-config(或 SDL2 的 sdl2-config)文件为 g++ 生成包含和库参数。例如,由于我在 OSX 上通过 Homebrew 使用 SDL2,因此:

g++ sdltest.cpp -o sdltest `sdl2-config --cflags` `sdl2-config --lib`

转换为并运行:

g++ sdltest.cpp -o sdltest -I/usr/local/include/SDL2 -D_THREAD_SAFE -L/usr/local/lib -lSDL2

对于带有 sdl-config 的 SDL 1.x 应该同样工作,并且还有一个“--static-libs”选项,在我的身上给出:

-L/usr/local/lib -lSDL2 -lm -liconv -Wl,-framework,OpenGL -Wl,-framework,ForceFeedback -lobjc -Wl,-framework,Cocoa -Wl,-framework,Carbon -Wl,-framework,IOKit -Wl,-framework,CoreAudio -Wl,-framework,AudioToolbox -Wl,-framework,AudioUnit
于 2014-05-25T04:20:35.283 回答
1

您告诉 g++ 使用 链接 libSDL -lSDL,但您没有告诉它在哪里查看。-L/Users/snarehanger/Library/SDL使用或其他方式将 SDL 路径添加到命令行。


抱歉,我没有意识到这不清楚,所以我将 Joachim 的评论纳入答案。

  • 命令行选项区分大小写
  • 选项-l(小写的 ell)给出库的名称:它没有指定文件名或搜索路径
    • 例如,-lSDL可以匹配命令行中指定的搜索路径或编译到 gcc 中的默认值中的任何一个libSDL.a或,libSDL.so
    • gcc 手册:链接选项
  • 选项-L(大写 ell)将目录添加到查找请求的库时使用的搜索路径-l
    • 例如,完整的命令行将g++ sdltest.cpp -o sdltest -L/opt/local/lib -lSDL允许 g++ 查找/opt/local/lib/libSDL.so它是否存在
    • gcc 手册:目录选项
于 2012-07-19T23:18:08.993 回答