質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
g++

g++はGNUコンパイラコレクション(gcc)のC++コンパイラーです。

make

make は、ビルド作業を自動化するツールです。さまざまなファイルの最終変更時刻を比較し、従属するファイルよりも「ターゲット」のファイルが古いことがわかったときユーザーが設定していた命令を実行する事が可能です。

Q&A

2回答

982閲覧

.libファイルを指定しても未定義の参照というコンパイルエラーが出る原因が知りたい。

退会済みユーザー

退会済みユーザー

総合スコア0

g++

g++はGNUコンパイラコレクション(gcc)のC++コンパイラーです。

make

make は、ビルド作業を自動化するツールです。さまざまなファイルの最終変更時刻を比較し、従属するファイルよりも「ターゲット」のファイルが古いことがわかったときユーザーが設定していた命令を実行する事が可能です。

0グッド

0クリップ

投稿2022/09/11 04:15

提示コードですがmakeファイルのコメント部はubuntuのコンパイルで使っていたものです、また自作ライブラリファイル(.lib)を指定しているのにも関わらず未定義の参照というエラーが出る原因が知りたいです。

参考サイト:https://kaworu.jpn.org/cpp/g++#.E3.83.A9.E3.82.A4.E3.83.96.E3.83.A9.E3.83.AA.E3.82.92.E3.83.AA.E3.83.B3.E3.82.AF.E3.81.99.E3.82.8B

環境

OS windows 10
利用ライブラリ
opengl
glfw
glew
freetype
stb

コンソールログ
c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: obj/Player.o:Player.cpp:(.text+0xcc1): undefined reference to `FrameWork::Shader::setUniformMatrix4x4fv(char const*, glm::mat<4, 4, float, (glm::qualifier)0>)' c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: obj/Player.o:Player.cpp:(.text+0xd4c): undefined reference to `FrameWork::Sprite::Render(glm::mat<4, 4, float, (glm::qualifier)0>)' c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: obj/Player.o:Player.cpp:(.text+0xd70): undefined reference to `FrameWork::Shader::setDisable()' c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: obj/Player.o:Player.cpp:(.text+0xdf2): undefined reference to `FrameWork::GameObject::~GameObject()' c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: obj/Player.o:Player.cpp:(.rdata$_ZTV6Player[__ZTV6Player]+0x10): undefined reference to `FrameWork::GameObject::Collision(std::shared_ptr<FrameWork::GameObject>)' collect2.exe: error: ld returned 1 exit status make: *** [program] エラー 1
実行側

make

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 9 10 11$(PRG): $(OBJ) 12# $(CXX) $^ -o $@ -L./lib -lFrameWork -ldl -lGLESv2 -lGLU -lGL -lglfw3 -pthread -lGL -lGLEW -lfreetype -ldl -lX11 13 $(CXX) $^ -o $@ -lopengl32 -lglew32 -L./lib/libFrameWork 14 15$(OBJ_DIR)/%.o: src/%.cpp 16# $(CXX) -c -MMD -MP $< -o $@ -I./../src -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/stb/deprecated 17 $(CXX) -c -MMD -MP $< -o $@ -IC:\ -I./../src -IC:\glew\include -IC:\glfw\include 18 19-include $(DEP) 20 21clean: 22 rm -f ./$(OBJ_DIR)/*.o *.out ./$(OBJ_DIR)/*.d $(PRG) 23 24
FrameWork側

make

1PRG :=libFrameWork.lib 2#PRG :=libFrameWork.a 3SRC_DIR :=src 4OBJ_DIR :=obj 5DEP_DIR :=obj 6DEP :=$(wildcard $(DEP_DIR)/*.d) 7SRC :=$(wildcard $(SRC_DIR)/*.cpp) 8OBJ :=$(addprefix $(OBJ_DIR)/,$(patsubst %.cpp,%.o,$(notdir $(SRC)))) 9 10 11$(PRG): $(OBJ) 12# $(CXX) $^ -o $@ -ldl -lGLESv2 -lGLU -lGL -lglfw3 -pthread -lGL -lGLEW -lfreetype -ldl -lX11 13 ar rcs test/lib/$@ $(OBJ) 14 15$(OBJ_DIR)/%.o: src/%.cpp 16# $(CXX) -c -MMD -MP $< -o $@ -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/stb/deprecated 17 $(CXX) -c -MMD -MP $< -o $@ -IC:\ -IC:\glew\include -IC:\glfw\include 18 19-include $(DEP) 20 21clean: 22 rm -f ./$(OBJ_DIR)/*.o *.out ./$(OBJ_DIR)/*.d $(PRG) 23

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

そのlibファイルにもその関数が定義されてないんでしょう

投稿2022/09/11 05:28

y_waiwai

総合スコア87719

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

また自作ライブラリファイル(.lib)を指定しているのにも関わらず

$(CXX) $^ -o $@ -lopengl32 -lglew32 -L./lib/libFrameWork

ライブラリは指定されていません。
-L./lib/libFrameWork で指定したつもりなのでしょうが、-L はライブラリ検索パスの指定だけで、ライブラリ名は指定できません。以前にも同じ指摘をした覚えがあります。参考ページは間違いです。マニュアルを読みましょう。

ライブラリのファイル名を libFrameWork.a に変更して、適切な -L-l を設定しましょう。

投稿2022/09/11 14:35

編集2022/09/12 01:59
int32_t

総合スコア20670

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問