提示コードの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
# ライブラリLIB_SRC_DIR :=src LIB_OBJ_DIR :=obj LIB_DEP_DIR :=obj LIB_DEP :=$(wildcard $(LIB_DEP_DIR)/*.d)LIB_SRC :=$(wildcard $(LIB_SRC_DIR)/*.cpp)LIB_OBJ :=$(addprefix $(LIB_OBJ_DIR)/,$(patsubst %.cpp,%.o,$(notdir $(LIB_SRC)))) $(wildcard $(LIB_OBJ_DIR)/*.o)LIB :=libSDLGame.a # ライブラリ$(LIB): $(LIB_OBJ) ar rcs $@ $(LIB_OBJ) $(LIB_OBJ_DIR)/%.o: src/%.cpp $(CXX) -c -MMD -MP $< -o $@-include $(LIB_DEP) # ライブラリ オブジェクト抽出ext_lib: ar x /usr/lib/x86_64-linux-gnu/libSDL2.a --output $(OBJ_DIR) ar x /usr/lib/x86_64-linux-gnu/libSDL2main.a --output $(OBJ_DIR) ar x /usr/lib/x86_64-linux-gnu/libSDL2_image.a --output $(OBJ_DIR) clean: rm -f ./$(OBJ_DIR)/*.o *.out ./$(OBJ_DIR)/*.d $(LIB)
Project
Makefile
PRG :=program SRC_DIR :=src OBJ_DIR :=obj DEP_DIR :=obj DEP :=$(wildcard $(DEP_DIR)/*.d)SRC :=$(wildcard $(SRC_DIR)/*.cpp)OBJ :=$(addprefix $(OBJ_DIR)/,$(patsubst %.cpp,%.o,$(notdir $(SRC)))) LIB := ../lib/libSDLGame $(PRG): $(OBJ) $(CXX) $(OBJ) -o $@ -L../lib/libSDLGame.a $(OBJ_DIR)/%.o: src/%.cpp $(CXX) -c -MMD -MP $< -o $@-include $(DEP) clean: rm -f ./$(OBJ_DIR)/*.o *.out ./$(OBJ_DIR)/*.d $(PRG)
0 コメント