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

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

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

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

コマンドライン

コマンドライン(別名:Command Line Interface)は、ユーザに命令の入力を促す(プロンプト)文字列の表示を行い、すべての操作をキーボードを用いて文字列を打ち込む事でプログラムを走らせるユーザインターフェースです。

C++

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

Q&A

解決済

1回答

1388閲覧

makefile 入門者 glew,glfw,freetype,gl,をライブラリリンクしたい。

退会済みユーザー

退会済みユーザー

総合スコア0

makefile

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

コマンドライン

コマンドライン(別名:Command Line Interface)は、ユーザに命令の入力を促す(プロンプト)文字列の表示を行い、すべての操作をキーボードを用いて文字列を打ち込む事でプログラムを走らせるユーザインターフェースです。

C++

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

0グッド

0クリップ

投稿2021/09/29 05:44

編集2021/09/29 05:49

提示コードのコマンドラインですが下記のmakefileのようにライブラリを指定してもなぜリンクエラーがでるのでしょか?

pkg-config --cflags % pkg-config --libs
shigurechan@shigurechan-System-Product-Name:~/program/FrameWork$ pkg-config --cflags opengl shigurechan@shigurechan-System-Product-Name:~/program/FrameWork$ pkg-config --cflags glew shigurechan@shigurechan-System-Product-Name:~/program/FrameWork$ pkg-config --cflags glfw3 shigurechan@shigurechan-System-Product-Name:~/program/FrameWork$ pkg-config --cflags freetype2 -I/usr/local/include/freetype2 shigurechan@shigurechan-System-Product-Name:~/program/FrameWork$ pkg-config --libs opengl -lOpenGL shigurechan@shigurechan-System-Product-Name:~/program/FrameWork$ pkg-config --libs glew -lGLEW -lGLU -lGL shigurechan@shigurechan-System-Product-Name:~/program/FrameWork$ pkg-config --libs glfw3 -lglfw shigurechan@shigurechan-System-Product-Name:~/program/FrameWork$ pkg-config --libs freetype2 -L/usr/local/lib -lfreetype

を使ってパスを調べてそのまま入力したのですが原因がわかりません。

参考サイト: 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

command

1PRG :=GL 2SRC_DIR :=source 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) $^ -l ncurses -o $@ 13 $(CXX) -lGLEW -lGL -lglfw -L/usr/local/lib -lfreetype $^ -o $@ 14 15 16 17$(OBJ_DIR)/%.o: source/%.cpp 18 $(CXX) -std=c++2a -I/usr/local/include/freetype2 -c -MMD -MP $< -o $@ 19 -include $(DEP) 20 21clean: 22 rm -f ./$(OBJ_DIR)/*.o *.out ./$(OBJ_DIR)/*.d *.a $(PRG) 23
コマンドラインのログ(長すぎるの省略しています。)
g++ -lGLEW -lGL -lglfw -L/usr/local/lib -lfreetype obj/Ellipse.o obj/Line.o obj/Transform_2D.o obj/Circle.o obj/Triangle.o obj/Window.o obj/Camera.o obj/Main.o obj/Text.o obj/Init.o obj/Resource.o obj/Rectangle.o obj/Shader.o obj/Help.o obj/Point.o obj/Render.o obj/FrameWork.o obj/Simple_Draw.o -o GL /usr/bin/ld: obj/Ellipse.o: in function `FrameWork::Ellipse::Draw(glm::vec<2, float, (glm::qualifier)0>, glm::vec<2, float, (glm::qualifier)0>, int, float)': Ellipse.cpp:(.text+0x179): undefined reference to `__glewEnableVertexAttribArray' /usr/bin/ld: Ellipse.cpp:(.text+0x18a): undefined reference to `__glewBufferData' /usr/bin/ld: Ellipse.cpp:(.text+0x1f7): undefined reference to `__glewVertexAttribPointer' /usr/bin/ld: Ellipse.cpp:(.text+0x3d1): undefined reference to `__glewBufferSubData' /usr/bin/ld: Ellipse.cpp:(.text+0x6cf): undefined reference to `glDrawArrays' /usr/bin/ld: obj/Line.o: in function `FrameWork::Line::Line()': Line.cpp:(.text+0xa6): undefined reference to `__glewEnableVertexAttribArray' /usr/bin/ld: Line.cpp:(.text+0xb4): undefined reference to `__glewBufferData' /usr/bin/ld: Line.cpp:(.text+0x11b): undefined reference to `__glewVertexAttribPointer' /usr/bin/ld: obj/Line.o: in function `FrameWork::Line::Draw(glm::vec<2, float, (glm::qualifier)0>, glm::vec<2, float, (glm::qualifier)0>, unsigned short, float)': Line.cpp:(.text+0x1f5): undefined reference to `glLineWidth' /usr/bin/ld: Line.cpp:(.text+0x654): undefined reference to `__glewBufferSubData' /usr/bin/ld: Line.cpp:(.text+0x6e8): undefined reference to `glDrawArrays' /usr/bin/ld: obj/Circle.o: in function `FrameWork::Circle::Draw(glm::vec<2, float, (glm::qualifier)0>, unsigned short, unsigned short, float)': Circle.cpp:(.text+0x17b): undefined reference to `__glewEnableVe

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

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

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

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

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

itagagaki

2021/09/29 05:47

makeが何を実行したときに何というエラーが出たのですか?
退会済みユーザー

退会済みユーザー

2021/09/29 05:50

g++ -lGLEW -lGL -lglfw -L/usr/local/lib -lfreetype obj/Ellipse.o obj/Line.o obj/Transform_2D.o obj/Circle.o obj/Triangle.o obj/Window.o obj/Camera.o obj/Main.o obj/Text.o obj/Init.o obj/Resource.o obj/Rectangle.o obj/Shader.o obj/Help.o obj/Point.o obj/Render.o obj/FrameWork.o obj/Simple_Draw.o -o GL /usr/bin/ld: obj/Ellipse.o: です。リンクです。
guest

回答1

0

ベストアンサー

pkg-config --lib で表示されたのが、

-lOpenGL -lGLEW -lGLU -lGL -lglfw -L/usr/local/lib -lfreetype

で、Makefile が

$(CXX) -lGLEW -lGL -lglfw -L/usr/local/lib -lfreetype $^ -o $@

足りないですよね。


通常は、コマンドの出力をMakefileに書き写すのではなく、Makefileからコマンドを呼び出します。

Makefile

1LDFLAGS := `pkg-config --libs opengl glew glfw3 freetype2` 2... 3 $(CXX) $^ -o $@ $(LDFLAGS)

のように。

投稿2021/09/29 05:56

編集2021/09/29 06:13
int32_t

総合スコア21012

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

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

退会済みユーザー

退会済みユーザー

2021/09/29 06:00

$(CXX) -lOpenGL -lGLEW -lGLU -lGL -lglfw -L/usr/local/lib -lfreetype $^ -o $@ 上記のようにしたのですが以前として同じエラーが出ます。
int32_t

2021/09/29 06:15 編集

コマンドラインの順番を「$(CXX) $^ -o $@ -lOpenGL ....」にすると直るかもしれません。それか、ライブラリのインストールを失敗しているか。 Makefile の書き方についても追記しました。
退会済みユーザー

退会済みユーザー

2021/09/29 06:39

$(CXX) $^ -o $@ $(LDFLAGS) 上記のように最後にライブラリリンクを持っていったら治りました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問