У меня проблемы с подключением библиотек SDL - PullRequest
1 голос
/ 05 июня 2019

Я создаю make-файл для своей 2D-игры с песочницей, и когда я компилирую окончательный исполняемый файл, компоновщик не распознает все функции SDL.

. / Libs -> все библиотеки SDL (SDL2.lib, SDL2test.lib, SDL2_ttf.lib) ./include -> все классы и функции SDL

#variables
SRC_DIR = .
LIBS = -Llib/SDL2 -Llib/SDL2main -Llib/SDL2test -Llib/SDL2_ttf
INC = -Iinclude
BIN = theGame
CXX = g++
CXXFLAGS = -pedantic -Wall
RM = rm

#make
theGame: main.o Block.o Character.o FileAccess.o GameObject.o Item.o Ladder.o NPC.o Player.o Window.o World.o
    $(CXX) $(CXXFLAGS) -o $(BIN) main.o Block.o Character.o FileAccess.o GameObject.o Item.o Ladder.o NPC.o Player.o Window.o World.o $(LIBS)

main.o: main.cpp
    $(CXX) -c $(CXXFLAGS) $(INC) $(SRC_DIR)/$^

Block.o: Block.cpp
    $(CXX) -c $(CXXFLAGS) $(INC) $(SRC_DIR)/$^

Character.o: Character.cpp
    $(CXX) -c $(CXXFLAGS) $(INC) $(SRC_DIR)/$^

FileAccess.o: FileAccess.cpp
    $(CXX) -c $(CXXFLAGS) $(INC) $(SRC_DIR)/$^

GameObject.o: GameObject.cpp
    $(CXX) -c $(CXXFLAGS) $(INC) $(SRC_DIR)/$^

Item.o: Item.cpp
    $(CXX) -c $(CXXFLAGS) $(INC) $(SRC_DIR)/$^

Ladder.o: Ladder.cpp
    $(CXX) -c $(CXXFLAGS) $(INC) $(SRC_DIR)/$^

NPC.o: NPC.cpp
    $(CXX) -c $(CXXFLAGS) $(INC) $(SRC_DIR)/$^

Player.o: Player.cpp
    $(CXX) -c $(CXXFLAGS) $(INC) $(SRC_DIR)/$^

Window.o: Window.cpp
    $(CXX) -c $(CXXFLAGS) $(INC) $(SRC_DIR)/$^

World.o: World.cpp
    $(CXX) -c $(CXXFLAGS) $(INC) $(SRC_DIR)/$^

g ++ -pedantic -Wall -o theGame main.o Block.o Character.oFileAccess.o GameObject.o Item.o Ladder.o NPC.o Player.o Window.o World.o -Llib / SDL2 -Llib / SDL2main -Llib / SDL2test -Llib / SDL2_ttf main.o: в функции pollMenuEvents(Window&)': main.cpp:(.text+0x23): undefined reference to SDL_PollEvent'main.o: в функции pollEvents(Window&, std::vector<Character*, std::allocator<Character*> >&, World*)': main.cpp:(.text+0xae): undefined reference to SDL_PollEvent' Block.o: в функции Block::draw(int, int) const': Block.cpp:(.text+0xf4): undefined reference to SDL_SetRenderDrawColor 'Block.cpp :(. text + 0x10b): неопределенная ссылка на SDL_RenderFillRect' Ladder.o: In function Ladder :: draw (int, int) const': Ladder.cpp :(. Text + 0x19a): неопределенная ссылка на SDL_SetRenderDrawColor' Ladder.cpp:(.text+0x1b1): undefined reference to SDL_RenderFillRect' Ladder.cpp :(. Text + 0x22e): неопределенная ссылка на SDL_SetRenderDrawColor' Ladder.cpp:(.text+0x245): undefined reference to SDL_RenderFillRect 'Ladder.cpp :(. Text + 0x2dd): неопределенная ссылка на SDL_SetRenderDrawColor' Ladder.cpp:(.text+0x2f4): undefined reference to SDL_RenderFillRect 'NPC.o: в функции NPC::draw(int, int) const': NPC.cpp:(.text+0xbd0): undefined reference to SDL_SetRenderDrawColor' NPC.cpp :(. text + 0xbe7):неопределенная ссылка на `SDL_RenderFillRect '

.,.

1 Ответ

0 голосов
/ 05 июня 2019

Изменение:

LIBS = -Llib/SDL2 -Llib/SDL2main -Llib/SDL2test -Llib/SDL2_ttf

Кому:

LIBS = -Llib -lSDL2 -lSDL2main -lSDL2test -lSDL2_ttf

Правила компилятора не совсем корректны, так как в предварительных условиях отсутствует каталог исходного файла (они работают только потому, что SRC_DIR равно .).

Все эти правила компилятора можно заменить одним правилом шаблона:

%.o: $(SRC_DIR)/%.cpp
    $(CXX) -o $@ -c $(CXXFLAGS) $(INC) $^
...