Связывание ошибок с библиотекой 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) не имеет значения, если вы не подключаетесь к своей программе, а просто генерируете объекты.