【问题标题】:SDL linking errors with terminal/g++ on OSX lionOSX Lion 上的 SDL 与终端/g++ 的链接错误
【发布时间】:2012-07-19 05:12:44
【问题描述】:

今天早上我在使用 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 而不是一个文本编辑器和终端。谢谢。

【问题讨论】:

  • 在设置 Macports 环境时,是否更改了 INCLUDE 和 LIB 环境变量。还有为什么不使用 Xcode,因为它可以更轻松地调试/编辑等
  • 我不认为我这样做了,我必须这样做吗?我玩过使用 Xcode 的想法,但我真的很喜欢使用 Sublime Text,并认为使用终端的挑战将是一个很好的学习体验 - 确实如此,但事实证明这是有问题的。如果我无法解决这个问题,那么我可能会尝试使用 Xcode。

标签: c++ compilation terminal osx-lion sdl


【解决方案1】:

您应该使用包含的 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

【讨论】:

    【解决方案2】:

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


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

    • 命令行选项区分大小写
    • 选项-l(小写的ell)给出库的名称:它既没有指定文件名也没有指定搜索路径
      • 例如,-lSDL 可以匹配libSDL.alibSDL.so,在命令行指定的搜索路径中的任何位置或编译到 gcc 中的默认值
      • gcc manual: link options
    • 选项-L(大写的ell)在查找-l请求的库时使用的搜索路径添加一个目录
      • 完整的命令行 g++ sdltest.cpp -o sdltest -L/opt/local/lib -lSDL 将允许 g++ 找到 /opt/local/lib/libSDL.so(如果存在),例如
      • gcc manual: directory options

    【讨论】:

    • 如果使用 Macports -L/opt/local/lib o
    • g++ sdltest.cpp -o sdltest -l/cd/library/frameworks/sdl.framework/SDL 我试过了,它的变种,我试过 Marks 的建议,我只是不断得到同样的错误,它找不到它。我应该再次尝试安装 SDL 吗?
    • @snarehanger 注意-l-L 之间的区别:后者使用大写L,而前者不使用。 -l 告诉链接器要链接的什么 库,以及-L 在哪里 可以找到它们。您必须使用 both,例如g++ sdltest.cpp -o sdltest -L/opt/local/lib -lSDL.
    猜你喜欢
    • 2012-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-19
    • 1970-01-01
    • 2011-09-12
    相关资源
    最近更新 更多