提示コードですがコンパイル、リンクは通るのですが実行エラーでます、これはなぜでしょうか?参考サイトを参考に追加のパッケージをインストールしましたが依然として エラーが出ます。ファイルディレクトリがないと言われているのですが。これはなぜでしょうか?
./GL: error while loading shared libraries: libGLEW.so.1.13: cannot open shared object file: No such file or directory
参考サイト: https://www.jianshu.com/p/fa83a15949b8
$ sudo apt-cache search libGLEW glew-utils - OpenGL Extension Wrangler - ユーティリティ libglew2.1 - OpenGL Extension Wrangler - runtime environment libglew-dev - OpenGL Extension Wrangler - development environment libglewmx-dev - OpenGL Extension Wrangler MX - development environment libglewmx1.13 - OpenGL Extension Wrangler (Multiple Rendering Contexts)
$ sudo find / -name libGLEW.so.1.13 -type f find: ‘/run/user/1000/doc’: 許可がありません find: ‘/run/user/1000/gvfs’: 許可がありません
PRG :=GL SRC_DIR :=source OBJ_DIR :=obj DEP_DIR :=obj DEP :=$(wildcard $(DEP_DIR)/*.d) SRC :=$(wildcard $(SRC_DIR)/*.cpp) OBJ :=$(addprefix $(OBJ_DIR)/,$(patsubst %.cpp,%.o,$(notdir $(SRC)))) LDFLAGS :=`pkg-config --libs=opengl glew glfw3 freetype2` $(PRG): $(OBJ) #$(CXX) $^ -l ncurses -o $@ $(CXX) $^ -o $@ -L/usr/local/lib -lGLU -lGL -lglfw3 -lpthread -lGL -lGLEW -lfreetype -ldl -lX11 $(OBJ_DIR)/%.o: source/%.cpp #$(CXX) -std=c++2a -I/usr/local/include/freetype2 -I/usr/include/libpng16 -I/usr/local/include -c -MMD -MP $< -o $@ $(CXX) -std=c++2a -c -MMD -MP $< -o $@ -include $(DEP) clean: rm -f ./$(OBJ_DIR)/*.o *.out ./$(OBJ_DIR)/*.d *.a $(PRG)
find しても見つからないということは、一度 glew をインストールして消しましたか?
「apt-cache search 」はインストールできるパッケージを表示しているだけで、質問者さんの環境のインストール状態には無関係です。
この質問のエラーと関係あるかどうかは分かりませんが、gcc(g++)でpthreadを使うためには、「-lpthread」ではなく「-pthread」を付ける必要があるみたいです
https://stackoverflow.com/questions/23250863/difference-between-pthread-and-lpthread-while-compiling
(リンク時だけじゃなくて、コンパイル時にも付ける必要があるかも??)
> sudo apt-cache search libGLEW
aptでインストールした「libGLEW」関連の情報は、下記を実行したら分かると思います
dpkg -l libGLEW
dpkg -L libGLEW
前者でインストールされてるバージョンが、後者でインストールされたそれぞれのファイルがどこにあるのかが分かるはず
(sudoが必要なら、付けてください)
なるほど。-pthreadをコンパイル、リンクに追加しましたがかわりません。
このように表示されます。つまりインストールされていないとうことでしょうか?
$ dpkg -l libGLEW
dpkg-query: libGLEW に一致するパッケージが見つかりません
shigurechan@shigurechan-System-Product-Name:~/prg/GL$ dpkg -L libGLEW
dpkg-query: パッケージ 'libglew' はまだインストールされていません
Use dpkg --contents (= dpkg-deb --contents) to list archive files contents.
> インストールされていないとうことでしょうか?
間違えました
ごめんなさい
パッケージ名は「libGLEW」ではなく、「sudo apt-cache search libGLEW」の実行結果で5行表示されてる、各行の一番左のものです
たとえば、「glew-utils」なら、
dpkg -l glew-utils
dpkg -L glew-utils
と実行します
5行表示されてるそれぞれで、上記のように実行してみてください
どれか入ってるかも
libGLEW.so.2.1 のパッケージインストールはできていたようなので、次は libGLEW.so.1.13 を参照している犯人を見つける必要があります。まずは、
% ldd GL
(GL は質問者さんがビルドした実行ファイル)
を実行してみて、libGLEW.so.1.13 を参照しているかどうかチェックしてください。(参照していないと予想)
なるほど。以下ようにしましたが参照していますか? インデント部のコードです
$ ldd GL
linux-vdso.so.1 (0x00007fff432ce000)
libGL.so.1 => /lib/x86_64-linux-gnu/libGL.so.1 (0x00007fa10d780000)
libGLEW.so.1.13 => /lib/libGLEW.so.1.13 (0x00007fa10d6d6000)
libfreetype.so.6 => /usr/local/lib/libfreetype.so.6 (0x00007fa10d61e000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fa10d618000)
libX11.so.6 => /lib/x86_64-linux-gnu/libX11.so.6 (0x00007fa10d4db000)
libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fa10d2f9000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fa10d1a8000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fa10d18d000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fa10d16a000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fa10cf78000)
libGLdispatch.so.0 => /lib/x86_64-linux-gnu/libGLdispatch.so.0 (0x00007fa10cec0000)
libGLX.so.0 => /lib/x86_64-linux-gnu/libGLX.so.0 (0x00007fa10ce8c000)
libpng16.so.16 => /lib/x86_64-linux-gnu/libpng16.so.16 (0x00007fa10ce52000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fa10ce36000)
/lib64/ld-linux-x86-64.so.2 (0x00007fa10d8d7000)
libxcb.so.1 => /lib/x86_64-linux-gnu/libxcb.so.1 (0x00007fa10ce0c000)
libXau.so.6 => /lib/x86_64-linux-gnu/libXau.so.6 (0x00007fa10ce06000)
libXdmcp.so.6 => /lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007fa10cdfe000)
libbsd.so.0 => /lib/x86_64-linux-gnu/libbsd.so.0 (0x00007fa10cde2000)
/lib/libGLEW.so.1.13 があるではないですか。よく見たら find の使い方も間違ってますね。
% file /lib/libGLEW.so.1.13
を実行してこのファイルが何者か確認しましょう。
(32bit版なのではないかと予想)
libGLEWをソースからビルドして/にインストールしたことがありますか? もう環境がぐちゃぐちゃですね。
指示通り以下のコマンドを実行したところエラーでました。
glew ならびに各ライブラリはソースファイルをダウンロードしてインストールしました。
環境がぐちゃぐちゃとはどういったところがぐちゃぐちゃなのでしょうか?またその場合は初期化でしょうか?
$ dpkg -L glew-utils file /lib/libGLEW.so.1.13
/.
/usr
/usr/bin
/usr/bin/glewinfo
/usr/bin/visualinfo
/usr/share
/usr/share/doc
/usr/share/doc/glew-utils
/usr/share/doc/glew-utils/README.md.gz
/usr/share/doc/glew-utils/copyright
/usr/share/doc/glew-utils/changelog.Debian.gz
/.
/usr
/usr/bin
/usr/bin/file
/usr/share
/usr/share/bug
/usr/share/bug/file
/usr/share/bug/file/control
/usr/share/bug/file/presubj
/usr/share/doc
/usr/share/doc/file
/usr/share/doc/file/README.Debian
/usr/share/doc/file/README.gz
/usr/share/doc/file/copyright
/usr/share/man
/usr/share/man/man1
/usr/share/man/man1/file.1.gz
/usr/share/doc/file/changelog.Debian.gz
dpkg-query: エラー: --listfiles は有効なパッケージ名を必要としますが、`/lib/libGLEW.so.1.13' はそうではありません: 指定子 '/lib/libGLEW.so.1.13' に不正なパッケージ名があります: 英数字の文字で始まらなければなりません
パッケージ照会についてのヘルプには、--help を使用してください。
> dpkg -L glew-utils file /lib/libGLEW.so.1.13
違いますよ
dpkg -L glew-utils
と
file /lib/libGLEW.so.1.13
は、別のもの
失礼しました。
$ dpkg -L glew-utils
/.
/usr
/usr/bin
/usr/bin/glewinfo
/usr/bin/visualinfo
/usr/share
/usr/share/doc
/usr/share/doc/glew-utils
/usr/share/doc/glew-utils/README.md.gz
/usr/share/doc/glew-utils/copyright
/usr/share/doc/glew-utils/changelog.Debian.gz
> glew ならびに各ライブラリはソースファイルをダウンロードしてインストールしました。
あれ?
aptで入れたのではないのですか
それなら、「dpkg -L...」で確認しても、意味は無いです
それは、aptでインストールしたファイルがどこにあるのかを表示するコマンドなので
てっきり、質問に「sudo apt-cache search libGLEW」と書かれてたので、aptで入れたのだと思ってました
諸事情等でpcを初期化したので
int32_tさんが書かれてるように、下記を実行してみてください
file /lib/libGLEW.so.1.13
回答1件
あなたの回答
tips
プレビュー