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

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

新規登録して質問してみよう
ただいま回答率
86.12%
makefile

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

C++

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

受付中

静的ラブラリを指定しているのに未定義の参照と言うエラーが出る原因が知りたい。

退会済みユーザー

退会済みユーザー

総合スコア0

makefile

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

C++

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

1回答

0リアクション

0クリップ

374閲覧

投稿2022/08/18 09:01

提示コードの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)

以下のような質問にはリアクションをつけましょう

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

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

2022/08/18 12:46

こちらの質問が他のユーザーから「やってほしいことだけを記載した丸投げの質問」という指摘を受けました。

2022/08/18 09:15

こちらの質問が他のユーザーから「過去に投稿した質問と同じ内容の質問」という指摘を受けました。

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

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

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

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

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

makefile

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

C++

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