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