
Ubuntu日本語フォーラム

ログインしていません。
はじめまして。
Windows PC上でUbuntu(モニタ未接続)のデスクトップ環境を使おうとしています。
サーバ:Ubuntu 10.04
クライアント:Windows 7(Real VNC)
こちらのサイトを参考にubuntu上にVNCサーバを設置しようとしています。
ttp://d.hatena.ne.jp/arupaka-_-arupaka/20100107/1262855517
パスワードファイルの作成のため
vncpasswd /etc/passwd_vnc
を実行したところ次のエラーになりました。
vncpasswd: symbol lookup error: vncpasswd: undefined symbol: __builtin_vec_new
シンボルがないとのことですが、どうすればこのエラーを回避できますか?
どなたかご教示いただけたら幸いです。
よろしくお願いいたします。
オフライン
>サーバ:Ubuntu 10.04
このインストールの詳細は?
日本語Remix阪orサーバ版?、AMD64?、最新アップデート済み?、
リポジトリは標準のまま?、VNCサーバのインストールは、apt-getで?
__builtin_vec_new は、コマンド実行時に呼び出す、ライブラリで宣言されているものなので、
インストールしたパッケージに問題あるか(作成ミスや破損等)、
インストールが途中で止まってしまっているのでなければ、
自前でソースからインストールでもしない限り、滅多に出るエラーじゃないと思う。
試しに
$ sudo apt-get update
$ sudo apt-get upgrade
してみて、エラーが無いようでしたら、
$ sudo ldconfig
してみてください。
オフライン
siさん
回答ありがとうございます。
>>サーバ:Ubuntu 10.04
> 日本語Remix阪orサーバ版?、AMD64?、最新アップデート済み?、
> リポジトリは標準のまま?、VNCサーバのインストールは、apt-getで?
・Ubuntu Desktop 日本語 Remix CDでUbuntu 9.10をインストールした後、アップデートしました。
・最新アップデート済です。
・リポジトリは標準のままです。
・VNCサーバはapt-getでインストールしました。
__builtin_vec_new は、コマンド実行時に呼び出す、ライブラリで宣言されているものなので、
インストールしたパッケージに問題あるか(作成ミスや破損等)、
インストールが途中で止まってしまっているのでなければ、
自前でソースからインストールでもしない限り、滅多に出るエラーじゃないと思う。
試しに
>$ sudo apt-get update
>$ sudo apt-get upgrade
>してみて、エラーが無いようでしたら、
>$ sudo ldconfig
>してみてください。
前半2つのapt-getでエラーはありませんでした。
ldconfigを実行しても画面上は何も表示されませんでした。
その後vncpasswdを実行したところ、前回と同じように
vncpasswd: symbol lookup error: vncpasswd: undefined symbol: __builtin_vec_new
となりました。
ライブラリの作成ミスや破損の可能性があるとのことですが、この場合ubuntuを再インストールするしか解決策はないのでしょうか?
それなりに使っているシステムなので、できるだけ再インストールは避けたいのですが・・・
オフライン
debian のバグレポートに,vnc4server について同様の状況が報告されていて,アップデートで原因不明のまま治ったともあります.
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=542850
また,次の記事によると,__builtin_vec_new は gcc-2 の libstdc++.so で定義されていて gcc-3 以降は廃止されたとか.
http://www.ntg.nl/pipermail/ntg-vtex/2003-September/000367.html
そんな古いシンボルを使おうとする何かがシステムに存在するのですから,apt-get, synaptic 等の標準以外の方法でソフトをインストールした事はありませんか?
/usr/local/lib にインストールしたライブラリがこの種のトラブルの原因となる場合があります.
# 特に初心者の場合で,インストールした事を認識していない例も過去にありました.
オフライン
einundzwanzighundertsechsさん
回答ありがとうございます。
実は前任者から引き継いだシステムなので、インストールしたソフトやインストール方法をすべて把握していません。
ただ、引き継ぎメモを読み返すと気になる記述がありました。
=== memo ===
実行時にlibstdc++-libc6.2-2.so.3がない旨の警告があり、次のコマンドを実行
ln -s /usr/lib/libstdc++.so.6 /usr/lib/libstdc++-libc6.2-2.so.3
============
前任者と連絡が取れないため、これ以上の情報がありません。
何を実行したときも不明です。
そんなに古いソフトは使っていないはずですが・・・
情報が少なくて申し訳ありません。
仮に、
・古いライブラリを参照しているソフトを使わない
・vnc4server を使えるようにする
とした場合、どのような手順を踏めばよいでしょうか?
オフライン
vnc4serverインストールして、試してみましたが、エラーは出ませんでした。
## 参考 ##
下記参照し、私のインストール状況と比較してみてください。
vncpasswd実行
$ sudo vncpasswd /etc/passwd_vnc
Password:
Verify:
Password too long - only the first 8 characters will be used
$ ls /etc/passwd*
/etc/passwd /etc/passwd- /etc/passwd_vnc
vnc4serverのバージョン確認
$ dpkg -p vnc4server|grep Version
Version: 4.1.1+xorg4.3.0-37ubuntu2
vncpasswdのパス確認
$ which vncpasswd
/usr/bin/vncpasswd
vncpasswdの共用ライブラリ依存表示
$ ldd /usr/bin/vncpasswd
linux-vdso.so.1 => (0x00007fff9adff000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00007fef6a501000)
libm.so.6 => /lib/libm.so.6 (0x00007fef6a27e000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00007fef6a066000)
libc.so.6 => /lib/libc.so.6 (0x00007fef69ce4000)
/lib64/ld-linux-x86-64.so.2 (0x00007fef6a82c000)
オフライン
情報提供として…
Fedora では,libstdc++-libc6.2-2.so.3 は「再コンパイル不可能なクローズドソースの古いバイナリ」のために
compat-libstdc++-296 パッケージに含まれる共有ライブラリです.
apt-file で検索しましたが,Lucid では同様のパッケージは見つかりませんでした.そのため
guny さん による投稿:
ただ、引き継ぎメモを読み返すと気になる記述がありました。
=== memo ===
実行時にlibstdc++-libc6.2-2.so.3がない旨の警告があり、次のコマンドを実行
ln -s /usr/lib/libstdc++.so.6 /usr/lib/libstdc++-libc6.2-2.so.3
============
の回避措置をしたのでしょう.前任の方が「古いバイナリ」をインストールした疑いが濃厚です.
私が思いつく問題のバイナリを特定するための策は次の2つです.
積極的な策:vncpasswd からダイナミックリンクをコマンドで辿り,問題のバイナリを探す.(si さんの提示された方法)
消極的な策:「停止が致命的なサービス」に必須のものでないことを祈りつつ,前任者の貼ったリンクを消去して問題のバイナリが警告を吐くのを待つ.
オフライン
siさん
わざわざ試していただき、ありがとうございます。
同じ操作を私の環境で行った結果は次の通りです。
einundzwanzighundertsechsさんの情報とつきあわせると、libstdc++-libc6.2-2.so.3 を参照しているのが問題なのでしょうか?
★vncpasswd実行
当方はエラーになります。
$ sudo vncpasswd /etc/passwd_vnc
vncpasswd: symbol lookup error: vncpasswd: undefined symbol: __builtin_vec_new
$ ls /etc/passwd*
/etc/passwd /etc/passwd-
★vnc4serverのバージョン確認
siさんと同じバージョンです。
$ dpkg -p vnc4server|grep Version
Version: 4.1.1+xorg4.3.0-37ubuntu2
★vncpasswdのパス確認
インストール先のパスは異なるようです。
$ which vncpasswd
/usr/local/bin/vncpasswd
★vncpasswdの共用ライブラリ依存表示
共用ライブラリ依存も異なるようです。
$ ldd /usr/local/bin/vncpasswd
linux-gate.so.1 => (0x0085a000)
libstdc++-libc6.2-2.so.3 => /usr/lib/libstdc++-libc6.2-2.so.3 (0x003b4000)
libm.so.6 => /lib/tls/i686/cmov/libm.so.6 (0x00913000)
libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0x00110000)
/lib/ld-linux.so.2 (0x002d2000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x0026a000)
オフライン
guny さん による投稿:
★vncpasswdのパス確認
インストール先のパスは異なるようです。$ which vncpasswd
/usr/local/bin/vncpasswd★vncpasswdの共用ライブラリ依存表示
共用ライブラリ依存も異なるようです。$ ldd /usr/local/bin/vncpasswd
linux-gate.so.1 => (0x0085a000)
libstdc++-libc6.2-2.so.3 => /usr/lib/libstdc++-libc6.2-2.so.3 (0x003b4000)
libm.so.6 => /lib/tls/i686/cmov/libm.so.6 (0x00913000)
libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0x00110000)
/lib/ld-linux.so.2 (0x002d2000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x0026a000)
前任の方が VNC サーバを標準以外の方法でインストールしていたと言うことですね.
$ ls -l /usr/local/bin
でそれらしい実行ファイル(vnc…)を調べ,どこか別のディレクトリに退避しましょう.
オフライン
einundzwanzighundertsechsさん
情報ありがとうございます。
次のコマンドで調べたところ、libstdc++-libc6.2-2.so.3は最終的にlibstdc++.so.6.0.13を参照しているようです。
ls -l /usr/lib/libstdc*
/usr/lib/libstdc++-libc6.2-2.so.3 -> /usr/lib/libstdc++.so.6
/usr/lib/libstdc++.so.6 -> libstdc++.so.6.0.13
/usr/lib/libstdc++.so.6.0.13
ところで、ご呈示いただいた「消極的な策」も試してみました。
sudo mv /usr/lib/libstdc++-libc6.2-2.so.3 /usr/lib/libstdc++-libc6.2-2.so.3_kari
しかしこれだけではvncpasswdがlibstdc++-libc6.2-2.so.3を参照しようとするので、実行時にエラーとなります。
$ ldd /usr/local/bin/vncpasswd
linux-gate.so.1 => (0x00895000)
libstdc++-libc6.2-2.so.3 => not found
libm.so.6 => /lib/tls/i686/cmov/libm.so.6 (0x00ae8000)
libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0x00e70000)
/lib/ld-linux.so.2 (0x00434000)
vnc4serverを再インストールしても同様でした。
$ sudo apt-get --reinstall install vnc4server
「前任者の貼ったリンクを消去」というのは改名だけでは駄目なのでしょうか?
オフライン
einundzwanzighundertsechsさん
それらしいファイルとして次のファイルをホームディレクトリに移動しました
vncconfig
vncpasswd
vncserver
vncviewer
移動後にvncpasswdを実行しましたが、以前と同様のエラーになりました。
オフライン
提示した策は問題の「古いバイナリ」を特定する作戦であり,問題を解決するものでは有りません.
そして,/usr/local/bin/vncpasswd そのものが問題の「古いバイナリ」でした.
/* 予想はしていましたが確信は持てませんでした */
Ubuntu 提供のファイルと同名のものを,/usr/local/bin や /usr/local/lib に標準以外の方法でインストールすると,
/usr/local のものが優先されて使用されるため今回のようなトラブルとなります.
が,
guny さん による投稿:
それらしいファイルとして次のファイルをホームディレクトリに移動しました
vncconfig
vncpasswd
vncserver
vncviewer
移動後にvncpasswdを実行しましたが、以前と同様のエラーになりました。
$ ls -l `which vncpasswd`
$ ls -lL `which vncpasswd`
$ ldd `which vncpasswd`
を実行して「古いバイナリ」を参照していないかもう一度確認してください.
オフライン
einundzwanzighundertsechsさん
ご指摘通り、/usr/localのvncpasswdは「古いバイナリ」を参照していました。
vncpasswd そのものが原因の「古いバイナリ」とは目からウロコでした。
/usr/localのそれらしいリンクを削除した後、vnc4serverを再インストールしたら
正しくvncpasswdが実行できました。
einundzwanzighundertsechsさん siさん
いろいろ教えていただき、本当にありがとうございました。
オフライン