OSX lion上终端/g++的SDL链接错误 我今天早上在使用C++和高级文本和终端的时候安装了OSX Lyo和XCODE,使用了SDL,但是我在编译终端时遇到了一些问题,这是我的代码。 #include "SDL/SDL.h" int main(int argc, char* args[]) { //Start SDL SDL_Init(SDL_INIT_EVERYTHING); //Quit SDL SDL_Quit(); return 0; }

OSX lion上终端/g++的SDL链接错误 我今天早上在使用C++和高级文本和终端的时候安装了OSX Lyo和XCODE,使用了SDL,但是我在编译终端时遇到了一些问题,这是我的代码。 #include "SDL/SDL.h" int main(int argc, char* args[]) { //Start SDL SDL_Init(SDL_INIT_EVERYTHING); //Quit SDL SDL_Quit(); return 0; },c++,compilation,terminal,osx-lion,sdl,C++,Compilation,Terminal,Osx Lion,Sdl,我将SDL.framework、SDL_mixer.framework和devellite放入我的库文件夹,然后使用Macports获取SDL,但这不起作用,后者也没有帮助 当我使用'g++sdltest.cpp-o sdltest-lSDL'时,我得到以下结果-'ld:library not found for-lSDLcollect2:ld returned 1 exit status'。有什么办法可以让它工作吗 另外,出于兴趣,如果我在格式化我的硬盘并重新安装OSX Lion和XCode(

我将SDL.framework、SDL_mixer.framework和devellite放入我的库文件夹,然后使用Macports获取SDL,但这不起作用,后者也没有帮助

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


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

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

对不起,我不知道这不清楚,所以我把约阿希姆的评论纳入了答案中

命令行选项区分大小写 选项-l小写字母ell给出库的名称:它既不指定文件名也不指定搜索路径 例如,-lSDL可以匹配libSDL.a或libSDL.so,可以匹配命令行上指定的搜索路径中的任何位置,也可以匹配编译到gcc中的默认值 选项-L大写将在查找使用-L请求的库时使用的搜索路径中添加一个目录 例如,完整的命令行g++sdltest.cpp-o sdltest-L/opt/local/lib-lSDL将允许g++查找/opt/local/lib/libSDL.so(如果存在)
您告诉g++使用-lSDL链接libSDL,但没有告诉它在哪里查找。 使用-L/Users/snarehanger/Library/SDL或其他命令将SDL路径添加到命令行中

对不起,我不知道这不清楚,所以我把约阿希姆的评论纳入了答案中

命令行选项区分大小写 选项-l小写字母ell给出库的名称:它既不指定文件名也不指定搜索路径 例如,-lSDL可以匹配libSDL.a或libSDL.so,可以匹配命令行上指定的搜索路径中的任何位置,也可以匹配编译到gcc中的默认值 选项-L大写将在查找使用-L请求的库时使用的搜索路径中添加一个目录 例如,完整的命令行g++sdltest.cpp-o sdltest-L/opt/local/lib-lSDL将允许g++查找/opt/local/lib/libSDL.so(如果存在)
您应该使用包含的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配置的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

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

设置Macports环境时,是否更改了INCLUDE和LIB环境变量。还有,为什么不使用Xcode,因为它可以更容易地调试/编辑etcI?我不认为我这样做了,我必须这样做吗?我曾经玩弄过使用Xcode的想法,但我真的很喜欢使用Sublime文本,并且认为使用终端的挑战将是一个很好的学习体验——确实如此,但事实证明这是有问题的。如果我无法解决这个问题,那么我可能会尝试使用Xcode。当您设置Macports环境时,是否更改了INCLUDE和LIB环境变量。还有,为什么不使用Xcode,因为它可以更容易地调试/编辑etcI?我不认为我这样做了,我必须这样做吗?我曾经玩弄过使用Xcode的想法,但我真的很喜欢使用Sublime文本,并且认为使用终端的挑战将是一个很好的学习体验——确实如此,但事实证明这是有问题的。如果我无法解决这个问题,那么我可能会尝试使用Xcode。如果使用Macports-L/opt/local/lib og++sdltest.cpp-o sdltest-L/cd/library/frameworks/sdl.framework/sdl,我尝试过它的变体,也尝试过Marks建议,我只是不断得到它找不到的相同错误。我是否应该再次尝试安装SDL?@snarehanger注意到-l和-l之间的区别:后者使用大写字母l,而前者不使用-l告诉链接器要链接哪些库,以及-l在哪里可以找到它们。如果使用Macports-L/opt/local/lib og++sdltest,则必须同时使用这两种语言,例如g++sdltest.cpp-o sdltest-L/opt/local/lib-lSDL。
cpp-osdltest-l/cd/library/frameworks/sdl.framework/sdl我已经尝试过了,它的变体,我也尝试过Marks建议,我只是不断得到同样的错误,它找不到它。我是否应该再次尝试安装SDL?@snarehanger注意到-l和-l之间的区别:后者使用大写字母l,而前者不使用-l告诉链接器要链接哪些库,以及-l在哪里可以找到它们。您必须同时使用这两种语言,例如g++sdltest.cpp-o sdltest-L/opt/local/lib-lSDL。