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

时间:2011-12-14 02:32:22

标签: gcc ubuntu linker g++ sdl

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

我安装了所有这些软件包,并且没有“找不到文件”错误。只是很多未定义的引用......它没有意义,所以我写了一个快速测试应用程序:

#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

有人有什么想法吗?

3 个答案:

答案 0 :(得分:13)

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

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

答案 1 :(得分:1)

Gah,哪个傻瓜有想法改变编译器现在依赖于命令行中的选项顺序?

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

答案 2 :(得分:0)

如果您使用SDL_ttf,则需要

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