swrast
事はソフトウェアレンダラです。つまり、グラフィックカードのハードウェアドライバーが見つかりません。多数のlibGLライブラリがインストールされており、それらのライブラリへのシンボリックリンクが多数あります。これらを確認するには、シェルからこれを実行します。
find /usr -iname "*libGL.so*" -exec ls -l -- {} +
問題の原因として考えられるのは、グラフィックドライバーをインストールすると、これらのシンボリックリンクが壊れることがあることです。(特に/usr/local/lib/libGL.so.1.2.0
、間違ったlibまたは間違ったリンクへのsymリンクのいずれかである可能性があります)。
OpenGLプログラムが実行しようとしているライブラリを調べるには、少し冗長にして、簡単なOpenGLプログラムを実行します。これは、標準のOpenGLテストプログラムを使用して確認できます。
LIBGL_DEBUG=verbose glxgears
SFMLと同じように失敗することを願っています。これによりLIBGL_DEBUG
、どのOpenGLライブラリをロードしようとしているかがわかります。さらに、ロードしようとし/usr/local/lib/libGL.so.1.2.0
ているライブラリはほぼ確実になります(編集:これは、私がこれに答えた時点で私のマシンの標準OpenGLライブラリでした。現在、マシン上の他のバージョンである可能性があります)。
(この場合)解決策/usr/local/lib/libGL.so.1.2.0
は、それが正しいOpenGLライブラリを指すシンボリックリンクであることを確認することです。私の場合、Nvidia 3.40ドライバーがあるので、次を実行しました。
ln -s /usr/lib/nvidia-340/libGL.so.1 /usr/local/lib/libGL.so.1.2.0
ただし、自分に適したOpenGLライブラリ(最初の検索コマンドにリストされている)を指すようにする必要があります。
要約すると、(独自の)グラフィックスドライバーをインストールすると、OpenGLライブラリに使用されるシンボリックリンクが破損する可能性があります。この問題を解決するには、シンボリックリンクを手動で修正します(/usr/local/lib/libGL.so.1.2.0
最初に修正します)。
libGL.so
:LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/mesa ./glprogram
。デフォルトでは、Ubuntu 16.04が使用する/usr/lib/nvidia-361/libGL.so
ため、/etc/ld.so.conf.d/x86_64-linux-gnu_GL.conf
すべて正常に動作します。