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

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

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

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

g++

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

GCC

GCCはGNU Compiler Collectionの略です。LinuxのC言語コンパイラのデファクトスタンダードであり、数多くの他言語やプラットフォームサポートもします。

コンパイル

コンパイルとは、プログラミング言語のテキストソース(ソースコード)をコンピュータ上で実行可能な形式(オブジェクトコード)に変換することをいいます

C++

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

Q&A

解決済

2回答

951閲覧

gccによるコンパイルについて

witchy

総合スコア74

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

g++

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

GCC

GCCはGNU Compiler Collectionの略です。LinuxのC言語コンパイラのデファクトスタンダードであり、数多くの他言語やプラットフォームサポートもします。

コンパイル

コンパイルとは、プログラミング言語のテキストソース(ソースコード)をコンピュータ上で実行可能な形式(オブジェクトコード)に変換することをいいます

C++

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

0グッド

0クリップ

投稿2018/10/03 01:38

編集2018/10/03 01:42

①simple_window.cpp

#include <GL/glut.h> // ライブラリ用ヘッダファイルの読み込み // 表示部分をこの関数で記入 void display(void) { glClearColor (1.0, 1.0, 1.0, 1.0); // 消去色指定 glClear (GL_COLOR_BUFFER_BIT ); // 画面消去 /* ここに描画に関するプログラムコードを入れる */ glFlush(); // 画面出力 } // メインプログラム int main (int argc, char *argv[]) { glutInit(&argc, argv); // ライブラリの初期化 glutInitWindowSize(400 , 400); // ウィンドウサイズを指定 glutCreateWindow(argv[0]); // ウィンドウを作成 glutDisplayFunc(display); // 表示関数を指定 glutMainLoop(); // イベント待ち return 0; }

②コンパイル

C:\Users???\Documents\program\C++> g++ simple_window.cpp -o simple_window -lfreeglut -lglu32 -lopengl32

openGLを学習中の者です。
①のコードを②のようにコンパイルしたのですが、いくつか疑問が生じたので質問させていただきます。
1,ヘッダファイルglut.hをインクルードしたのですが、コンパイラはどのようにこのglut.hのパスを見つけているのでしょうか?

2,コンパイル時にリンカオプション"-l"でlfreeglut、lglu32、lopengl32を指定しましたが、このリンカオプション"-l"は、ここでいうとlibfreeglut.a、libglu32.a、libopengl32.aという.a拡張子のライブラリファイルを探すように指定しているのですか、それとも.dll、.aなどの拡張子を持つライブラリファイルの中から、指定したファイル名のファイルを探しているのですか?
またその場合、どのようにファイルのパスを探すのでしょうか?

ちなみに使用したファイルのパスは以下の通りです。
C:\Users???\Documents\program\C++\simple_window.cpp
C:\Users???\Documents\インストーラー\freeglut-MinGW-3.0.0-1.mp\freeglut\include\GL\glut.h
C:\Users???\Documents\インストーラー\freeglut-MinGW-3.0.0-1.mp\freeglut\lib\libfreeglut.a
C:\Windows\SysWOW64\opengl32.dll
C:\Windows\SysWOW64\glu32.dll

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

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

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

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

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

guest

回答2

0

ベストアンサー

こんにちは。

①のコードを②のようにコンパイルした

コンパイルには成功したのですか!?

freeglutを使ったことはないのですが、freeglut × MinGW の OpenGL用3DCGプログラミングの環境を Windows に導入する ! を見る限り、freeglutのヘッダとライブラリを MinGW がヘッダとライブラリを探すデフォルトのフォルダへコピーしています。
ですので、この操作をしないと通らないのではないかと思います。

コンパイラはどのようにこのglut.hのパスを見つけている

本当にコンパイラは glut.h を見つけてました?(not foundエラーは出ていない?)

ここでいうとlibfreeglut.a、libglu32.a、libopengl32.aという.a拡張子のライブラリファイルを探すように指定している

こちらが正しいです。単純にlibと.aが補われます。

gcc(MinGW含む)は、標準でいくつかのインクルード・パスを決め打ちしています。ライブラリ・パスも同様です。これらはコンパイルする際に、-vオプションを付けると見ることができます。(見やすくはないですが。)

投稿2018/10/03 03:05

Chironian

総合スコア23272

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

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

witchy

2018/10/03 09:02

ご回答ありがとうございます。コンパイルは成功しました。いただいたアドバイスを参考に考えてみたところ、以前freeglutとMinGWを導入したときに既に"MinGW がヘッダとライブラリを探すデフォルトのフォルダへコピー"の作業とそのフォルダへのパスの設定をしていました。なので先ほど私が載せたパスが参照されず、コンパイラは全く別のパス(MinGW がヘッダとライブラリを探すデフォルトのフォルダ)を参照していたようです。おかげさまで疑問が晴れました。本当にありがとうございました!
guest

0

  1. C言語 インクルード順序

  2. ライブラリ検索用のパスを指定するオプションがあり、それに従って探しに行きます

投稿2018/10/03 01:42

y_waiwai

総合スコア87747

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

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

witchy

2018/10/03 09:30

ご回答ありがとうございます! なるほど、インクルードにもデフォルトでライブラリ検索用のパスが設定されていて、かつその中でも優先度があるのですね。 勉強になりました。ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問