提示コードですがFrameWorkとGame二つのプロジェクトがありその内のFrameWorkのobjファイルを.aファイル出力してそれをGameプロジェクトでリンクして使いたいのですが以下のエラー出ます。これはなぜでしょうか? どうやってライブラリを参照するのでしょうか?
環境
CentOS GUI
端末
$ make ar rcs FrameWork.a FrameWork/obj/Render.o FrameWork/obj/Shape.o FrameWork/obj/Sprite.o FrameWork/obj/Transform.o FrameWork/obj/Camera.o FrameWork/obj/Init.o FrameWork/obj/Resource.o FrameWork/obj/Text.o FrameWork/obj/Shader.o FrameWork/obj/Model.o FrameWork/obj/Simple.o FrameWork/obj/Help.o FrameWork/obj/Window.o g++ -lrt Game/obj/Scene.o Game/obj/Entry.o Game/obj/Game.o Game/obj/Camera.o Game/obj/Main.o Game/obj/LightCube.o Game/obj/Player.o Game/obj/Actor.o Game/obj/Ground.o -o TopViewAction -ldl -lGLESv2 -lassimp -L/usr/local/lib -lGLU -lGL -lglfw3 -pthread -lGL -lGLEW -lfreetype -lX11 -L -lFrameWork.a Game/obj/Camera.o: 関数 `Camera::Update()' 内: Camera.cpp:(.text+0x11b): `FrameWork::Camera::setLook(glm::vec<3, float, (glm::qualifier)0>)' に対する定義されていない参照です Camera.cpp:(.text+0x136): `FrameWork::Camera::setPosition(glm::vec<3, float, (glm::qualifier)0>)' に対する定義されていない参照です Game/obj/Main.o: 関数 `main' 内: Main.cpp:(.text+0x49): `FrameWork::Init(glm::vec<2, int, (glm::qualifier)0>, glm::vec<2, int, (glm::qualifier)0>, char const*)' に対する定義されていない参照です
参考サイト: https://www.yunabe.jp/docs/static_library.html
参考サイト2: https://www.yokoweb.net/dokuwiki/programing/c-language/gcc-programing/gcc-library-link-order
Makefile
PRG :=TopViewAction STATIC_LIB :=FrameWork.a FRAMEWORK_SRC_DIR :=FrameWork/source/ GAME_SRC_DIR :=Game/source/ FRAMEWORK_OBJ_DIR :=FrameWork/obj GAME_OBJ_DIR :=Game/obj FRAMEWORK_DEP_DIR :=$(FRAMEWORK_OBJ_DIR) GAME_DEP_DIR :=$(GAME_OBJ_DIR) FRAMEWORK_SRC :=$(wildcard $(FRAMEWORK_SRC_DIR)/*.cpp) GAME_SRC :=$(wildcard $(GAME_SRC_DIR)/*.cpp) FRAMEWORK_OBJ :=$(addprefix $(FRAMEWORK_OBJ_DIR)/,$(patsubst %.cpp,%.o,$(notdir $(FRAMEWORK_SRC)))) GAME_OBJ :=$(addprefix $(GAME_OBJ_DIR)/,$(patsubst %.cpp,%.o,$(notdir $(GAME_SRC)))) FRAMEWORK_DEP :=$(wildcard $(FRAMEWORK_DEP_DIR)/*.d) GAME_DEP :=$(wildcard $(GAME_DEP_DIR)/*.d) $(PRG): $(GAME_OBJ) $(CXX) $^ -o $@ -ldl -lGLESv2 -lassimp -L/usr/local/lib -lGLU -lGL -lglfw3 -pthread -lGL -lGLEW -lfreetype -lX11 -L -l$(STATIC_LIB) $(STATIC_LIB): $(FRAMEWORK_OBJ) ar rc $@ $^ $(FRAMEWORK_OBJ_DIR)/%.o: FrameWork/source/%.cpp $(CXX) -std=c++2a -I/usr/local/include/freetype2 -I/usr/local/include/glm -I/usr/include/libpng16 -I/usr/local/include -pthread -c -MMD -MP $< -o $@ -include $(FRAMEWORK_DEP) $(GAME_OBJ_DIR)/%.o: Game/source/%.cpp $(CXX) -std=c++2a -I/usr/local/include/freetype2 -I/usr/local/include/glm -I/usr/include/libpng16 -I/usr/local/include -pthread -c -MMD -MP $< -o $@ -include $(GAME_DEP) clean: rm -f ./$(FRAMEWORK_OBJ_DIR)/*.o *.out ./$(FRAMEWORK_OBJ_DIR)/*.d *.a $(STATIC_LIB) rm -f ./$(GAME_OBJ_DIR)/*.o *.out ./$(GAME_OBJ_DIR)/*.d *.a $(PRG)
回答1件
あなたの回答
tips
プレビュー