2012-07-19 56 views
1

我今天早上安装了OSX Lion和Xcode,学习C++后,使用了一段时间的Sublime Text和Terminal来使用SDL,但是在尝试编译终端时遇到了一些问题,这是我的代码。SDL链接错误与OSX上的终端/ g ++ lion

#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的 - 精简版到我的库文件夹,然后用MacPorts的获得SDL时没有工作,后者并没有帮助。

当我使用'g ++ sdltest.cpp -o sdltest -lSDL'时,我得到以下结果 - 'ld:library找不到-lSDLcollect2:ld返回1退出状态'。有什么办法可以让这个工作?另外,出于兴趣,如果我在格式化硬盘并重新安装OSX Lion和XCode(我正在考虑快速完成)之后做SDL的“全新安装”,那么最佳方式是什么?去做吧?我遇到了所有我发现的指南中的错误(这对我来说肯定是一个问题,我只需要找到最容易理解的一个),并且它们中的很多似乎都是使用Xcode而不是文本编辑器和终端。谢谢。

+0

当您设置MacPorts的环境,你改变你的INCLUDE和LIB环境变量。另外为什么不使用Xcode,因为它允许更容易的调试/编辑等 – Mark 2012-07-19 23:15:16

+0

我不认为我做过,我必须吗?我玩弄了使用Xcode的想法,但我真的很喜欢使用Sublime Text,并认为使用Terminal的挑战会是一个很好的学习体验 - 但它证明是有问题的。如果我无法解决这个问题,那么我可能会尝试使用Xcode。 – snarehanger 2012-07-19 23:20:43

回答

0

你告诉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请求的库时使用的搜索路径将允许克++找到/opt/local/lib/libSDL.so如果它存在,例如
    • gcc manual: directory options
+1

那么,如果使用Macports -L/opt/local/lib – Mark 2012-07-19 23:22:57

+0

g ++ sdltest.cpp -o sdltest -l/cd/library/frameworks/sdl.framework/SDL 我试过了,它的变体和我已经试过Marks的建议,我只是不断收到它找不到的错误。我应该尝试再次安装SDL吗? – snarehanger 2012-07-19 23:40:04

+1

@snarehanger注意'-l'和'-L'之间的区别:后者使用大写字母L,而前者不使用。 '-l'告诉链接器_what_库链接,'-L'_where_可以找到它们。您必须使用_both_,例如'g ++ sdltest.cpp -o sdltest -L/opt/local/lib -lSDL'。 – 2012-07-20 06:40:45

2

应使用包括SDL-配置(或SDL2-配置为SDL2)文件来生成你包含和库参数到g ++。例如,因为我通过自制的OSX使用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 1。X与SDL-配置,并有另外一个“--static - 库”选项,即对矿井给出:

-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