Связывание ошибок с библиотекой 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 ответа

Решение

Я думаю, что проблема в порядке ваших аргументов.

Вместо

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

пытаться

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

Хотя позиция -o main не очень важна, порядок библиотек ссылок таков. Компиляторы разрешают символы в том порядке, в каком библиотеки отображаются в командной строке.

Кажется, что ваш компоновщик не может найти, где расположены библиотеки. Определите, где они были установлены, и передайте этот путь компоновщику с помощью директивы -L.

Поместите что-то вроде этого: SDL= -L/ путь / к / установлен / SDL / библиотеки -lSDL -lSDL_mixer

Обратите внимание, что в: g++ $(SDL) -c $<переменная $ (SDL) не имеет значения, если вы не подключаетесь к своей программе, а просто генерируете объекты.

Другие вопросы по тегам