Ubuntu 11.10:GCC / G ++不会链接库

我去编译我的项目,它使用SDL,SDL_ttf,OpenAL和GTK。 所有这些输出错误如下:

TxtFunc.cpp:(.text+0x61): undefined reference to `TTF_OpenFont' TxtFunc.cpp:(.text+0x8c): undefined reference to `TTF_RenderText_Solid' TxtFunc.cpp:(.text+0xf6): undefined reference to `SDL_UpperBlit' TxtFunc.cpp:(.text+0x108): undefined reference to `TTF_CloseFont' TxtFunc.cpp:(.text+0x114): undefined reference to `SDL_FreeSurface' 

为每个图书馆电话。 我正在编译以下链接选项:

sdl-config --libs pkg-config gtk+-2.0 --libs pkg-config openal --libs -lalut -lSDL_ttf

我已安装了所有这些软件包,并没有“文件未find”错误。 只是很多未定义的参考文献…没有意义,所以我写了一个快速testing应用程序:

 #include "SDL/SDL.h" int main() { SDL_Init(SDL_INIT_VIDEO); return 0; } 

并编译如下:

 g++ `sdl-config --libs --cflags` -o sdl-test ./sdl-test.cpp 

我甚至尝试直接链接到“/usr/lib/libSDL-1.2.so.0”或“/usr/lib/libSDL.a”

所有这些选项都以相同的输出结束:

 /tmp/cc05XT8U.o: In function `main': sdl-test.cpp:(.text+0xa): undefined reference to `SDL_Init' collect2: ld returned 1 exit status 

任何人有任何想法?

通常,您需要使用命令行上的符号的文件之后有-l选项。 也许尝试移动sdl-config --libs --cflags到命令的结尾? 即为您的测试程序:

 g++ -o sdl-test ./sdl-test.cpp `sdl-config --libs --cflags` 

呃,哪个枕头有想法改变编译器现在依靠命令行中的选项顺序?

那么,这也解决了我的问题,只是在我的Makefile中($ OBJS)之后移动($ CFLAGS),并且所有未知的SDL库引用的链接问题都消失了。

如果你使用SDL_ttf,你需要

 g++ main.cpp -o sdl-test `sdl-config --libs --cflags` -lSDL_ttf