私は結果として次のようなopenglプログラムをコンパイルしようとしています:
共有ライブラリのロード中にエラーが発生しました:libGLEW.so.1.11:共有オブジェクトファイルを開けません:そのようなファイルまたはディレクトリはありません
コンパイル:
g++ -o triangle triangle.cpp LoadShaders.cpp -I/home/mks/myGL/oglpg/include/ -L/home/mks/myGL/oglpg/lib -L/usr/lib64 -lglut -lGL -lGLU -lGLEW
/ home/mks/myGL/oglpg/libにはすべてのライブラリがあります。
libGLEW.so libGLEW.so.1.11.0
libGLEW.a libGLEW.so.1.11
(私はスーパーユーザーではないので、上のフォルダーにglewをインストールしました)
私が行った場合:
ldd ./triangle | grep "GLEW"
libGLEW.so.1.11 => not found
-更新---
コンパイル:
g++ -o triangle triangle.cpp LoadShaders.cpp -I/home/mks/myGL/oglpg/include/ -L/home/mks/myGL/oglpg/lib -L/usr/lib64 -lglut -lGL -lGLU -lGLEW
ldd ./triangle:
linux-vdso.so.1 =>
libglut.so.3 => /usr/lib64/libglut.so.3
libGL.so.1 => /usr/lib64/nvidia/libGL.so.1
libGLU.so.1 => /usr/lib64/libGLU.so.1
libGLEW.so.1.11 => not found
libstdc++.so.6 => /usr/lib64/libstdc++.so.6
libm.so.6 => /lib64/libm.so.6
libgcc_s.so.1 => /lib64/libgcc_s.so.1
libc.so.6 => /lib64/libc.so.6
libXext.so.6 => /usr/lib64/libXext.so.6
libX11.so.6 => /usr/lib64/libX11.so.6
libXxf86vm.so.1 => /usr/lib64/libXxf86vm.so.1
libXi.so.6 => /usr/lib64/libXi.so.6
libnvidia-tls.so.340.29 => /usr/lib64/nvidia/tls/libnvidia-tls.so.340.29
libnvidia-glcore.so.340.29 => /usr/lib64/nvidia/libnvidia-glcore.so.340.29
libdl.so.2 => /lib64/libdl.so.2
/lib64/ld-linux-x86-64.so.2
libxcb.so.1 => /usr/lib64/libxcb.so.1
libXau.so.6 => /usr/lib64/libXau.so.6
ls -al/home/mks/myGL/oglpg/lib:
drwxr-xr-x. .
drwxr-xr-x. ..
-rw-r--r--. freeglut_static.lib
-rw-r--r--. freeglut_static_vs2010_d.lib
-rw-r--r--. freeglut_static_vs2010.lib
-rw-r--r--. gl3w.c
-rw-r--r--. glew_static_d.lib
-rw-r--r--. glew_static_vs2010_d.lib
-rw-r--r--. glew_static_vs2010.lib
-rw-r--r--. libfreeglut.a
-rw-r--r--. libglew32.a
-rw-r--r--. libGLEW.a
lrwxrwxrwx. libGLEW.so -> libGLEW.so.1.11.0
lrwxrwxrwx. libGLEW.so.1.11 -> libGLEW.so.1.11.0
-rw-r--r--. libGLEW.so.1.11.0
-rw-r--r--. LoadShaders.cpp
-rw-r--r--. targa.cpp
-rw-r--r--. vbm.cpp
-rw-r--r--. vermilion32_d.lib
-rw-r--r--. vermilion32.lib
-rw-r--r--. vermilion64_d.lib
-rw-r--r--. vermilion64.lib
エコー$ PATH:
/usr/local/cuda-6.0/bin:/home/mks/bin:/usr/local/cuda-6.0/bin:/usr/lib64/:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin
動的ライブラリを見つける場所をシステムに指示する必要があります。 /usr/lib
のようなシステム全体のディレクトリは動的ライブラリのデフォルトの検索パスにありますが、カスタムディレクトリを追加する場合は、環境変数LD_LIBRARY_PATH
にリストしてそれらを宣言する必要があります。これは、PATH
のように、コロンで区切られたディレクトリのリストです。
export LD_LIBRARY_PATH=/home/mks/myGL/oglpg/lib
この行を~/.profile
または環境変数を定義する場所に置きます。シェルで実行することもでき、そのシェルから開始されたすべてのプログラムに適用されます。
または、ライブラリを使用してプログラムをビルドするときに、システム上のその場所を登録します。
g++ -Wl,-rpath,/home/mks/myGL/oglpg/lib … -L /home/mks/myGL/oglpg/lib -lGLEW
Program Library Howtoの共有ライブラリに関する章 がさらに役立つ場合があります。
更新
スーパーユーザーのコメントに気づきました。 rootにならずにlinkコマンドを試すことができます。そのフォルダのアクセス許可で引き続き許可される可能性があります。失敗した場合は、SysAdminに問い合わせてください。
アプリケーションがライブラリを探している場所には、シンボリックリンクは存在しません。
これを試してください(rootで):
ln -sf /home/mks/myGL/oglpg/lib/libGLEW.so.1.11.0 /usr/lib64/libGLEW.so.1.11
その後、再度ldd ./triangle
を実行し、出力がシンボリックリンクを見つけるかどうかを確認します。場所を見ない場合、他のシンボリックリンクを探してそこにリンクを作成します。場所が/usr/lib64
でない場合は、シンボリックリンクの場所を修正した後、ファイルシステムに未使用のシンボリックリンクを残さず、後でクリーンアップするのを忘れないように、必ずunlink /usr/lib64/libGLEW.so.1.11
を実行してください。
ln =>リンクを作成
sf =>シンボリックリンク、強制