質問: 1simple_window.cpp ``` #include // ライブラリ用ヘッダファイルの読み込み // 表示部分をこの関数で記入 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; } ``` 2コンパイル ``` C:\Users\???\Documents\program\C++> g++ simple_window.cpp -o simple_window -lfreeglut -lglu32 -lopengl32 ``` openGLを学習中の者です。 1のコードを2のようにコンパイルしたのですが、いくつか疑問が生じたので質問させていただきます。 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
回答: こんにちは。 > > 1のコードを2のようにコンパイルした > > コンパイルには成功したのですか!? > > > 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オプションを付けると見ることができます。(見やすくはないですが。)