我去编译我的项目,它使用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