gdbで何が起こったのか調べてみた
cuomo@poke ~ $ gdb /usr/bin/firefox GNU gdb (Gentoo 7.2 p1) 7.2 Copyright (C) 2010 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "x86_64-pc-linux-gnu". For bug reporting instructions, please see: <http://bugs.gentoo.org/>... Reading symbols from /usr/bin/firefox...(no debugging symbols found)...done. (gdb) run Starting program: /usr/bin/firefox [Thread debugging using libthread_db enabled] [New Thread 0x7fffe821b700 (LWP 27839)] [New Thread 0x7fffe7816700 (LWP 27840)]gdbを使ってfirefoxを起動しエラーが出るページへアクセスをするとgdbが以下のエラーを吐く
/usr/lib64/nspluginwrapper/i386/linux/npviewer.bin: error while loading shared libraries: libEGL.so.1: cannot open shared object file: No such file or directorynpviewer.binがlibEGL.so.1をロードできないらしいのでその辺を調べてみる
npviewer.binとlibEGL.so.1を調べてみた
エラーが出てるnpviewer.binはfileで調べて見たら32bit、でどのライブラリをリンクしているか調べてみる。
cuomo@poke ~ $ file /usr/lib64/nspluginwrapper/i386/linux/npviewer.bin /usr/lib64/nspluginwrapper/i386/linux/npviewer.bin: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.9, stripped cuomo@poke ~ $ ldd -v /usr/lib64/nspluginwrapper/i386/linux/npviewer.bin ... ... libXfixes.so.3 => /usr/lib32/libXfixes.so.3 (0xf6e57000) libatk-1.0.so.0 => /usr/lib32/libatk-1.0.so.0 (0xf6e3a000) libcairo.so.2 => /usr/lib32/libcairo.so.2 (0xf6d4e000) libpixman-1.so.0 => /usr/lib32/libpixman-1.so.0 (0xf6ce2000) libEGL.so.1 => not found libXrender.so.1 => /usr/lib32/libXrender.so.1 (0xf6cd8000) libxcb.so.1 => /usr/lib32/libxcb.so.1 (0xf6cbd000) libXau.so.6 => /usr/lib32/libXau.so.6 (0xf6cb9000) ...libEGL.so.1 => not foundでロードできてない様子。
とりあえず、/usr/lib32にあるlibEGL.so.1を読み込んでるらしいがどのパスから読み込んでるのかstraceで確認してみる。
straceでlibEGL.so.1の読み込み具合を確認
straceでどこのライブラリを読み込んでいるか確認してみる
cuomo@poke ~ $ straceでどこのライブラリを読み込んでいるか確認してみる strace /usr/lib64/nspluginwrapper/i386/linux/npviewer.bin mprotect(0xf6d8b000, 4096, PROT_NONE) = 0 mmap2(0xf6d8c000, 16384, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x67) = 0xfffffffff6d8c000 close(3) = 0 <span style="font-weight:bold;">open("/usr/lib32/libEGL.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)</span> open("/lib32/tls/i686/sse2/libEGL.so.1", O_RDONLY) = -1 ENOENT (No such file or directory) .. .. open("/usr/lib32/sse2/libEGL.so.1", O_RDONLY) = -1 ENOENT (No such file or directory) stat64("/usr/lib32/sse2", 0xffff5b0c) = -1 ENOENT (No such file or directory) open("/usr/lib32/libEGL.so.1", O_RDONLY) = -1 ENOENT (No such file or directory) stat64("/usr/lib32", {st_mode=S_IFDIR|0755, st_size=36864, ...}) = 0 writev(2, [{"/usr/lib64/nspluginwrapper/i386/"..., 50}, {": ", 2}, {"error while loading shared libra"..., 36}, {": ", 2}, {"libEGL.so.1", 11}, {": ", 2}, {"cannot open shared object file", 30}, {": ", 2}, {"No such file or directory", 25}, {"\n", 1}], 10/usr/lib64/nspluginwrapper/i386/linux/npviewer.bin: error while loading shared libraries: libEGL.so.1: cannot open shared object file: No such file or directory ) = 161 exit_group(127) = ?いろいろ読み込んだ挙句に無いと文句を言って終了してしまう。
open("/usr/lib32/libEGL.so.1", O_RDONLY) = -1 を読み込もうとしている。
ところでlibEGL.so.1ってなに?
libEGL.so.1の共有ライブラリのパッケージは何か調べてみると
poke ~ # equery b /usr/lib64/libEGL.so.1.0 [ Searching for file(s) /usr/lib64/libEGL.so.1.0 in *... ] media-libs/mesa-7.9.1 (/usr/lib64/libEGL.so.1.0) mesaパッケージに含まれているので/usr/lib32にシンボリックリンクを張ってみた poke ~ # ls -l /usr/lib32 | grep libEGL lrwxrwxrwx 1 root root 11 Mar 20 10:30 libEGL.so -> libEGL.so.1 lrwxrwxrwx 1 root root 13 Mar 20 10:29 libEGL.so.1 -> libEGL.so.1.0でもう一回straceで確認
cuomo@poke ~ $ ldd -v /usr/lib64/nspluginwrapper/i386/linux/npviewer.bin open("/usr/lib32/libEGL.so.1", O_RDONLY) = 3 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\2401\0\0\0\0\0\0"..., 512) = 512 close(3) = 0 stat64("/usr/lib32", {st_mode=S_IFDIR|0755, st_size=36864, ...}) = 0 writev(2, [{"/usr/lib64/nspluginwrapper/i386/"..., 50}, {": ", 2}, {"error while loading shared libra"..., 36}, {": ", 2}, {"libEGL.so.1", 11}, {": ", 2}, {"wrong ELF class: ELFCLASS64", 27}, {"", 0}, {"", 0}, {"\n", 1}], 10/usr/lib64/nspluginwrapper/i386/linux/npviewer.bin: error while loading shared libraries: libEGL.so.1: wrong ELF class: ELFCLASS64 ) = 131 exit_group(127) = ?ライブラリは読み込んだものの今度は、libEGL.so.1が64bitなのでダメだという
poke ~ # file /usr/lib64/libEGL.so.1.0 /usr/lib64/libEGL.so.1.0: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, stripped
media-libs/mesaのインストールでは/usr/lib64/libEGL.so.1.0の64bit版がインストールされてるみたいなので、32bitをとりあえず別の32bitのGentooなPCから持ってきて置いてみた。
poke lib32 # cd /usr/lib32/ poke lib32 # rm libEGL.so.1.0 <span style="font-weight:bold;"><--- 64bit/usr/lib64/libEGL.so.1.0へのシンボリックリンクを削除</span> poke lib32 # ls -l | grep libEGL.so lrwxrwxrwx 1 root root 11 Mar 20 10:30 libEGL.so -> libEGL.so.1 lrwxrwxrwx 1 root root 13 Mar 20 10:29 libEGL.so.1 -> libEGL.so.1.0 rwxr-xr-x 1 root root 62972 Mar 20 10:29 libEGL.so.1.0 <-- 新しく設置した32bit版のlibEGL.so.1.0 poke lib32 # file /usr/lib32/libEGL.so.1.0 /usr/lib32/libEGL.so.1.0: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, stripped新しく設置した32bit版のlibEGL.so.1.0
poke lib32 # file /usr/lib32/libEGL.so.1.0 /usr/lib32/libEGL.so.1.0: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, strippedもう一度、/usr/lib64/nspluginwrapper/i386/linux/npviewer.binを実行してみる
cuomo@poke ~ $ /usr/lib64/nspluginwrapper/i386/linux/npviewer.bin npviewer, NPAPI plugin viewer. Version 1.3.0 usage: /usr/lib64/nspluginwrapper/i386/linux/npviewer.bin [GTK flags] [flags] -h --help print this message -t --test check plugin is compatible -i --info print plugin information -p --plugin set plugin path -c --connection set connection path動いたっぽいのでfirefoxでエラーの出たページを表示してみると治っているっぽい。
こんなのでいいのか?
とりあえず直してみたが、問題はmesaパッケージにあるのか分からない。
Gentooのbugzillaにも[http://bugs.gentoo.org/show_bug.cgi?id=354943:title=Bug 354943]であったが、どうやって修理すればいいのか?
とりあえず動いたからそのまま放置、時間が無いのであとで調べよう。
誰か、分かったら教えてください、よろしく。
0 件のコメント:
コメントを投稿