将错误与SDL_mixer库链接

时间:2013-05-01 03:37:29

标签: c++ makefile sdl sdl-mixer

我正在使用SDL和SDL_mixer库,并在编译时遇到以下错误:

....
game.cpp:(.text+0x88f): undefined reference to `Mix_OpenAudio'
Jukebox.o: In function `Jukebox::~Jukebox()':
Jukebox.cpp:(.text+0x17): undefined reference to `Mix_FreeChunk'
Jukebox.cpp:(.text+0x27): undefined reference to `Mix_FreeChunk'
Jukebox.cpp:(.text+0x37): undefined reference to `Mix_FreeChunk'
Jukebox.cpp:(.text+0x47): undefined reference to `Mix_FreeChunk'
....

依旧等等或我使用SDL_mixer函数时的所有实例。

我非常确信错误在Makefile中,因为它在我制作的另一个测试程序中编译得很好。

我的Makefile

SDL= -lSDL -lSDL_mixer

OBJ=game.o Jukebox.o ...

all:    main

main:   $(OBJ)
        g++ $(SDL) $(OBJ) -o main

%.o:    %.cpp
        g++ $(SDL) -c $<

clean:
        rm -f *.o *~ main
        rm -f */*~

错误在哪里?

2 个答案:

答案 0 :(得分:3)

我认为问题是你的论点的顺序。

而不是

main:   $(OBJ)
        g++ $(SDL) $(OBJ) -o main

main:   $(OBJ)
        g++ -o main $(OBJ) $(SDL) 

虽然-o main的位置并不重要,但链接库的顺序是。编译器按照库在命令行中出现的顺序解析符号。

答案 1 :(得分:1)

您的链接器似乎无法找到库所在的位置。确定它们的安装位置,并通过-L指令将此路径传递给链接器。

这样的东西: SDL = -L / path / to / installed / SDL / libraries -lSDL -lSDL_mixer

请注意,在:g ++ $(SDL)-c $&lt;变量$(SDL)是无关紧要的,一旦你没有链接到你的程序,只是生成对象。