1

このチュートリアルに従って、C++ を使用して Linux マシンで OpenGL を動作させようとしています。

Ubuntu 12.04 LTS を使用しています。私は両方のパッケージを持っており freeglut3-devmesa-common-devどちらをインストールしましたかsudo apt-get install package-name1 package-name2

念のため、推奨ディレクトリに移動して、次/usr/include/GLのファイルをリストしましたls

freeglut_ext.h  freeglut.h  freeglut_std.h  glext.h  gl.h  gl_mangle.h  glu.h  glu_mangle.h  glut.h  glxext.h  glx.h  glx_mangle.h  internal

私は持っていることに気付いたgl.hのでglut.h、チュートリアルで推奨されているようにサンプルプログラムをテストしました。zip ファイルをダウンロードし、ファイルを同じディレクトリに解凍してから、makeユーティリティを実行しました。実行後の出力は次のとおりですmake

g++ -Wall -o cube main.cpp imageloader.cpp -lglut
imageloader.cpp: In function ‘Image* loadBMP(const char*)’:
imageloader.cpp:141:2: warning: suggest parentheses around ‘&&’ within ‘||’ [-Wparentheses]
/tmp/ccWT2wvp.o:main.cpp:function loadTexture(Image*): error: undefined reference to 'glGenTextures'
/tmp/ccWT2wvp.o:main.cpp:function loadTexture(Image*): error: undefined reference to 'glBindTexture'
/tmp/ccWT2wvp.o:main.cpp:function loadTexture(Image*): error: undefined reference to 'glTexImage2D'

他に約 20 の未定義の参照エラーが発生しました。したがって、何かが正しくインストールされていないか、ファイルが不足している可能性があります。実行してハードウェアアクセラレーション情報を確認したことに注意してくださいglxinfo。ハードウェアアクセラレーションがあります。

  1. c ++を使用してOpenGLを機能させるにはどうすればよいですか

EDIT両方の回答を組み合わせて使用​​すると、機能することが証明されました。具体的には、次のことを行いました。

someonespc:~/c++$ ls
imageloader.cpp  imageloader.h  main.cpp  Makefile  Makefile~  vtr.bmp
d2b2@d2b2-Aspire-7745G:~/c++$ g++ -Wall -lGL -o cube main.cpp imageloader.cpp -lglut -lGLU
imageloader.cpp: In function ‘Image* loadBMP(const char*)’:
imageloader.cpp:141:2: warning: suggest parentheses around ‘&&’ within ‘||’ [-Wparentheses]
someonespc:~/c++$ ls
cube  imageloader.cpp  imageloader.h  main.cpp  Makefile  Makefile~  vtr.bmp

それから私は走りました./cube、そしてそれはうまくいきました!なぜ入れ-lGL-lGLU働いたのか説明してください

4

3 に答える 3

6

-lGLgcc コマンド ライン オプションに追加します。関数が にある可能性があることをリンカに伝えますlibGL.so(これは へのリンクlibGL.so.1です)。

于 2013-08-03T14:59:39.520 に答える
1

Cmakeを使用してUbuntu 14.04で同じエラーが発生しました

私にとっての答えは、 CMakeList.txt の先頭に FIND_PACKAGE(OpenGL) を追加することでした

${OPENGL_gl_LIBRARY} を target_link_libraries() のリストの最後に追加します。

于 2016-12-08T22:47:37.620 に答える
1

私はUbuntuでいくつかのOpenGLコードを書いていました.makefileをチェックするとき、どこにでも2つのライブラリがリンクされています. (glutとGLU)

ファイルlibGLU.soを探すため、Linuxシステムでは大文字が重要であることに注意してください。

ウェブサイトのコードでテストしたところ、次のコマンドで実行可能ファイルが得られます。

g++ -Wall -o cube main.cpp imageloader.cpp -lglut -lGLU
于 2013-08-03T15:07:26.433 に答える