提示コードのMakefileですが以下ように静的ライブラリ用のものとプロジェクト用のもの2つに分けたのですがプロジェクト用を実行すると以下の未定義の参照というエラーが出ます。これはなぜでしょうか? ライブラリビルドのコマンドを見るとしっかりとobj/SDLGame.oとうように静的ラブラリに含まれていますが。これは何が原因なのかわかりません。
library make command
shigurechan@shigurechan-System-Product-Name:~/Program/SDLGame/lib$ make ar rcs libSDLGame.a `obj/SDLGame.o` obj/IMG.o obj/IMG_WIC.o obj/IMG_bmp.o obj/IMG_gif.o obj/IMG_jpg.o obj/IMG_lbm.o obj/IMG_pcx.o obj/IMG_png.o obj/IMG_pnm.o obj/IMG_svg.o 省略
Project make commmand
shigurechan@shigurechan-System-Product-Name:~/Program/SDLGame/Pong$ make g++ obj/Game.o obj/Main.o -o program -L../lib/libSDLGame.a /usr/bin/ld: obj/Game.o: in function `Game::Loop()': Game.cpp:(.text+0x51): undefined reference to `SDLGame::KeyEvent()' /usr/bin/ld: Game.cpp:(.text+0x6e): undefined reference to `SDLGame::GetKeyCode()' /usr/bin/ld: obj/Main.o: in function `main': Main.cpp:(.text+0x4b): undefined reference to `SDLGame::Initialize(char const*, glm::vec<2, int, (glm::qualifier)0>)' /usr/bin/ld: Main.cpp:(.text+0x92): undefined reference to `SDLGame::Finalize()' collect2: error: ld returned 1 exit status make: *** [Makefile:15: program] エラー 1 shigurechan@shigurechan-System-Product-Name:~/Program/SDLGame/Pong$
library
Makefile
1# ライブラリ 2LIB_SRC_DIR :=src 3LIB_OBJ_DIR :=obj 4LIB_DEP_DIR :=obj 5LIB_DEP :=$(wildcard $(LIB_DEP_DIR)/*.d) 6LIB_SRC :=$(wildcard $(LIB_SRC_DIR)/*.cpp) 7LIB_OBJ :=$(addprefix $(LIB_OBJ_DIR)/,$(patsubst %.cpp,%.o,$(notdir $(LIB_SRC)))) $(wildcard $(LIB_OBJ_DIR)/*.o) 8LIB :=libSDLGame.a 9 10# ライブラリ 11$(LIB): $(LIB_OBJ) 12 ar rcs $@ $(LIB_OBJ) 13 14$(LIB_OBJ_DIR)/%.o: src/%.cpp 15 $(CXX) -c -MMD -MP $< -o $@ 16-include $(LIB_DEP) 17 18# ライブラリ オブジェクト抽出 19ext_lib: 20 ar x /usr/lib/x86_64-linux-gnu/libSDL2.a --output $(OBJ_DIR) 21 ar x /usr/lib/x86_64-linux-gnu/libSDL2main.a --output $(OBJ_DIR) 22 ar x /usr/lib/x86_64-linux-gnu/libSDL2_image.a --output $(OBJ_DIR) 23 24clean: 25 rm -f ./$(OBJ_DIR)/*.o *.out ./$(OBJ_DIR)/*.d $(LIB) 26
Project
Makefile
1PRG :=program 2SRC_DIR :=src 3OBJ_DIR :=obj 4DEP_DIR :=obj 5DEP :=$(wildcard $(DEP_DIR)/*.d) 6SRC :=$(wildcard $(SRC_DIR)/*.cpp) 7OBJ :=$(addprefix $(OBJ_DIR)/,$(patsubst %.cpp,%.o,$(notdir $(SRC)))) 8 9LIB := ../lib/libSDLGame 10 11 12 13 14$(PRG): $(OBJ) 15 $(CXX) $(OBJ) -o $@ -L../lib/libSDLGame.a 16 17 18 19$(OBJ_DIR)/%.o: src/%.cpp 20 $(CXX) -c -MMD -MP $< -o $@ 21-include $(DEP) 22 23clean: 24 rm -f ./$(OBJ_DIR)/*.o *.out ./$(OBJ_DIR)/*.d $(PRG) 25
https://teratail.com/questions/j09jgkzscalple の重複でしょうか。
