我正在使用 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 中,因为它在我制作的另一个测试程序中编译得很好。
我的生成文件
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 */*~
错在哪里?
最佳答案
我认为问题在于你的论证顺序。
代替
main: $(OBJ)
g++ $(SDL) $(OBJ) -o main
尝试
main: $(OBJ)
g++ -o main $(OBJ) $(SDL)
虽然 -o main 的位置并不重要,但链接库的顺序很重要。编译器按照库在命令行中出现的顺序解析符号。
关于c++ - 与 SDL_mixer 库链接错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16312376/