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

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

新規登録して質問してみよう
ただいま回答率
87.20%
参照

参照は、プログラミングにおいて変数や関数といったメモリ空間上での所在を指示するデータのことを指します。その中にはデータ自体は含まれず、他の場所にある情報を間接的に指示するプログラムです。

makefile

make は、プログラムのビルド作業を自動化するツールです。コンパイル、リンク、インストール等のルールを記述したテキストファイルをmakefileと呼び、このルールに従ってmakeが自動的にビルドを実行する。

コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

受付中

Makefile ライブラリを参照しても未定義の参照というエラーが出る原因が知りたい。

退会済みユーザー

退会済みユーザー

総合スコア0

参照

参照は、プログラミングにおいて変数や関数といったメモリ空間上での所在を指示するデータのことを指します。その中にはデータ自体は含まれず、他の場所にある情報を間接的に指示するプログラムです。

makefile

make は、プログラムのビルド作業を自動化するツールです。コンパイル、リンク、インストール等のルールを記述したテキストファイルをmakefileと呼び、このルールに従ってmakeが自動的にビルドを実行する。

コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

2回答

-5評価

0クリップ

1324閲覧

投稿2021/11/15 07:59

編集2022/01/12 10:55

提示コードのコマンドプロンプト部ですがライブラリをリンクすると大量の未定義の参照というエラーが出ます。なぜ未定義の参照というエラーエラー出るのでしょうか?makeifleはlibFramework.aを生成してそれをリンクする二つのプロジェクトあります。またmake clean コマンドを実行すると下記のエラーになります。これは何をしたのでしょうか?

#####試したこと
libFrameWork.aを生成するコード以外を全てコメントアウトして無理やり生成してリンクしましたが同じエラーがでます。

参考サイト: https://www.yunabe.jp/docs/static_library.html

環境

OS: windows10
コンパイラ: tdm64-gcc-10.3.0-2
利用ライブラリ
glfw
glew
opengl
glm
stb
freetype
assimp

現状

C:\TDM-GCC-64\x86_64-w64-mingw32ディレクトリ内のinclude , lib ディレクトリの該当のライブラリをコピー

make FrameWork.a
C:\Users\Matsuzawa ken\Desktop\TopViewGame>make libFrameWork.a make: `libFrameWork.a' is up to date.
コマンドプロンプト
C:\Users\yw325\Desktop\TopViewGame>make g++ Game/obj/Control.o Game/obj/Cube.o Game/obj/Entry.o Game/obj/Game.o Game/obj/Ground.o Game/obj/LightCube.o Game/obj/Main.o Game/obj/Player.o Game/obj/Scene.o -o program.exe -L -l FrameWork.lib -lglfw3 -lfreetype -lglew32 Warning: corrupt .drectve at end of def file Warning: corrupt .drectve at end of def file Warning: corrupt .drectve at end of def file C:/TDM-GCC-64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: i386 architecture of input file `Game/obj/Scene.o' is incompatible with i386:x86-64 output C:/TDM-GCC-64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: Game/obj/Cube.o:Cube.cpp:(.text+0x43): undefined reference to `FrameWork::Shader::Shader()' C:/TDM-GCC-64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: Game/obj/Cube.o:Cube.cpp:(.text+0x55): undefined reference to `FrameWork::Shader::Shader()'
make clean
C:\Users\yw325\Desktop\TopViewGame>make clean rm -f ./FrameWork/obj/*.o *.out ./FrameWork/obj/*.d *.a libFrameWork.a process_begin: CreateProcess(NULL, rm -f ./FrameWork/obj/*.o *.out ./FrameWork/obj/*.d *.a libFrameWork.a, ...) failed. make (e=2): 指定されたファイルが見つかりません。 make: *** [clean] エラー 2 C:\Users\yw325\Desktop\TopViewGame>
-v
C:\Users\yw325\Desktop\TopViewGame>make g++ -v Game/obj/Control.o Game/obj/Cube.o Game/obj/Entry.o Game/obj/Game.o Game/obj/Ground.o Game/obj/LightCube.o Game/obj/Main.o Game/obj/Player.o Game/obj/Scene.o -o program.exe -L -lFrameWork -lglew32 -lglfw3 -lfreetype -lopengl32 gンン spec gpオト「ワキB COLLECT_GCC=g++ COLLECT_LTO_WRAPPER=C:/TDM-GCC-64/bin/../libexec/gcc/x86_64-w64-mingw32/10.3.0/lto-wrapper.exe ^[Qbg: x86_64-w64-mingw32 configure ン: ../../../src/gcc-git-10.3.0/configure --build=x86_64-w64-mingw32 --enable-targets=all --enable-languages=ada,c,c++,fortran,jit,lto,objc,obj-c++ --enable-libgomp --enable-lto --enable-graphite --enable-cxx-flags=-DWINPTHREAD_STATIC --disable-build-with-cxx --disable-build-poststage1-with-cxx --enable-libstdcxx-debug --enable-threads=posix --enable-version-specific-runtime-libs --enable-fully-dynamic-string --enable-libstdcxx-filesystem-ts=yes --disable-libstdcxx-pch --enable-libstdcxx-threads --enable-libstdcxx-time=yes --enable-mingw-wildcard --with-gnu-ld --disable-werror --enable-nls --disable-win32-registry --enable-large-address-aware --disable-rpath --disable-symvers --prefix=/mingw64tdm --with-local-prefix=/mingw64tdm --with-pkgversion=tdm64-1 --with-bugurl=https://github.com/jmeubank/tdm-gcc/issues Xbhf: posix T|[gウト「 LTO ウkASY€: zlib zstd gcc o[W 10.3.0 (tdm64-1) COMPILER_PATH=C:/TDM-GCC-64/bin/../libexec/gcc/x86_64-w64-mingw32/10.3.0/;C:/TDM-GCC-64/bin/../libexec/gcc/;C:/TDM-GCC-64/bin/../lib/gcc/x86_64-w64-mingw32/1

#####中身

C:\Users\yw325\Desktop\TopViewGame>ar t libFrameWork.a Actor.o Camera.o Help.o Init.o Model.o Render.o Resource.o Shader.o Shape.o Simple.o Sprite.o Text.o Transform.o Window.o C:\Users\yw325\Desktop\TopViewGame>
Makefile
PRG :=program.exe STATIC_LIB :=libFrameWork.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) $(STATIC_LIB) #$(CXX) $(GAME_OBJ) -o $@ -ldl -lGLESv2 -lassimp -L -l $(STATIC_LIB) -L/usr/local/lib -lGLU -lGL -lglfw3 -pthread -lGL -lGLEW -lfreetype -lX11 $(CXX) $(GAME_OBJ) -o $@ -L -lFrameWork -lglew32 -lglfw3 -lfreetype -lopengl32 $(STATIC_LIB): $(FRAMEWORK_OBJ) ar rc $@ $^ ranlib $@ $(FRAMEWORK_OBJ_DIR)/%.o: FrameWork/source/%.cpp $(CXX) -c -MMD -MP $< -o $@ -include $(FRAMEWORK_DEP) $(GAME_OBJ_DIR)/%.o: Game/source/%.cpp $(CXX) -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)

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

int32_t

2021/11/16 00:15

> Framework.aも生成されません make clean した後に make FrameWork.a (STATIC_LIB が FrameWork.lib の場合は make FrameWork.lib) を実行したとき、画面にはなんと表示されますか?
退会済みユーザー

退会済みユーザー

2021/11/16 00:49

文章を修正しました。
int32_t

2021/11/19 16:23

ライブラリがビルドできるようになったんですか? 何が原因でした? リンクのコマンドラインに -v を付けてみてください($(CXX) -v $(GAME_OBJ) ...)。その出力で何かわかるかもしれません。
退会済みユーザー

退会済みユーザー

2021/11/20 03:55

.aファイルはすべてをコメントアウトしてそれだけを生成して無理やり行いました。 -vを入れて実行しましたが似たよなエラーが出て依然として同じです。
int32_t

2021/11/20 13:47

なるほど、何も解決してないのですね。 2つ前のコメントでも1つ前のコメントでも情報の開示をお願いしたんですが、開示してくれないので現状何もアドバイスはありません。
退会済みユーザー

退会済みユーザー

2021/11/21 09:14

文章を修正しました。
int32_t

2021/11/22 00:25

「make clean」の出力はどうでもいいので、「make libFrameWork.a」の出力を見たいです。 -v の出力はそれで全部ではないのでは。LIBRARY_PATH= とかリンカ起動コマンドラインが出ると思うのです。
退会済みユーザー

退会済みユーザー

2021/12/04 07:47

C:\Users\Matsuzawa ken\Desktop\TopViewGame>make libFrameWork.a make: `libFrameWork.a' is up to date. という表示が出ます。
int32_t

2021/12/06 04:48

libFrameWork.a を消してから make libFrameWork.a を実行した結果を見たいです。 私の回答に11月22日に追記した件は試しましたか?
退会済みユーザー

退会済みユーザー

2021/12/06 06:30

と表示されました。11月22日の回答は試しましたが同じでした。 C:\Users\Matsuzawa ken\Documents\TopViewGame>make libFrameWork.a ar rc libFrameWork.a FrameWork/obj/Actor.o FrameWork/obj/Camera.o FrameWork/obj/Help.o FrameWork/obj/Init.o FrameWork/obj/Model.o FrameWork/obj/Render.o FrameWork/obj/Resource.o FrameWork/obj/Shader.o FrameWork/obj/Shape.o FrameWork/obj/Simple.o FrameWork/obj/Sprite.o FrameWork/obj/Text.o FrameWork/obj/Transform.o FrameWork/obj/Window.o ranlib libFrameWork.a

まだ回答がついていません

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

参照

参照は、プログラミングにおいて変数や関数といったメモリ空間上での所在を指示するデータのことを指します。その中にはデータ自体は含まれず、他の場所にある情報を間接的に指示するプログラムです。

makefile

make は、プログラムのビルド作業を自動化するツールです。コンパイル、リンク、インストール等のルールを記述したテキストファイルをmakefileと呼び、このルールに従ってmakeが自動的にビルドを実行する。

コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。