大学のUNIX(SunOS 5.6 Generic sun4u sparc SUNW)に自宅からLinux(vine2.1.5)から
telnetログインして
g++2.8.1でコンパイルしたc++の実行ファイルを実行させてみようとしたら自ホーム
ディレクトリ内の実行ファイルなら実行出来ましたが他人のディレクトリ下の実行
ファイルはどれも
ld.so.1: hoge: 重大なエラー: libstdc++.so.2.8.1: open に失敗しました: ファイ
ルもディレクトリもありません。
となってしまいました。
アクセス権限は-rwxr-xr-xとなってします。
これはどうすれば一体何が原因なのでしょうか?
___________________________
kmk...@hotmail.com
___________________________
> 大学のUNIX(SunOS 5.6 Generic sun4u sparc SUNW)に自宅からLinux(vine2.1.5)から
> telnetログインして
> g++2.8.1でコンパイルしたc++の実行ファイルを実行させてみようとしたら自ホーム
> ディレクトリ内の実行ファイルなら実行出来ましたが他人のディレクトリ下の実行
> ファイルはどれも
>
> ld.so.1: hoge: 重大なエラー: libstdc++.so.2.8.1: open に失敗しました: ファイ
> ルもディレクトリもありません。
>
> これはどうすれば一体何が原因なのでしょうか?
shared object が見つからないからです。
libstdc++.so.2.8.1 があるディレクトリを環境変数 LD_LIBRARY_PATH に追加
しましょう。
LD_LIBRARY_PATH を設定する代わりにコンパイル時に -R をつけるのもよいで
しょう。
Hiroshi Fujishima
Ms/Mr Hiroshi Fujishima worte as follows.
> shared object が見つからないからです。
> libstdc++.so.2.8.1 があるディレクトリを環境変数 LD_LIBRARY_PATH に追加
> しましょう。
> LD_LIBRARY_PATH を設定する代わりにコンパイル時に -R をつけるのもよいで
> しょう。
検索してみましたがこのバージョンのlibstdc++.soは見つかりませんでした。
以下の様なファイルなら有りました。
/usr/local/gnu/lib/libstdc++.a
/usr/local/lib/libstdc++.so
/usr/local/lib/libstdc++.so.2.7.2
/usr/local/lib/libstdc++.a
/usr/local/lib/libstdc++.so.2.8.0
/usr/local/.snapshot/hourly.0/gnu/lib/libstdc++.a
/usr/local/.snapshot/hourly.0/lib/libstdc++.so
/usr/local/.snapshot/hourly.0/lib/libstdc++.so.2.7.2
/usr/local/.snapshot/hourly.0/lib/libstdc++.a
/usr/local/.snapshot/hourly.0/lib/libstdc++.so.2.8.0
/usr/local/.snapshot/hourly.1/gnu/lib/libstdc++.a
/usr/local/.snapshot/hourly.1/lib/libstdc++.so
/usr/local/.snapshot/hourly.1/lib/libstdc++.so.2.7.2
/usr/local/.snapshot/hourly.1/lib/libstdc++.a
/usr/local/.snapshot/hourly.1/lib/libstdc++.so.2.8.0
/usr/local/.snapshot/nightly.0/gnu/lib/libstdc++.a
/usr/local/.snapshot/nightly.0/lib/libstdc++.so
/usr/local/.snapshot/nightly.0/lib/libstdc++.so.2.7.2
/usr/local/.snapshot/nightly.0/lib/libstdc++.a
/usr/local/.snapshot/nightly.0/lib/libstdc++.so.2.8.0
/usr/local/.snapshot/hourly.2/gnu/lib/libstdc++.a
/usr/local/.snapshot/hourly.2/lib/libstdc++.so
/usr/local/.snapshot/hourly.2/lib/libstdc++.so.2.7.2
/usr/local/.snapshot/hourly.2/lib/libstdc++.a
/usr/local/.snapshot/hourly.2/lib/libstdc++.so.2.8.0
/usr/local/.snapshot/hourly.3/gnu/lib/libstdc++.a
/usr/local/.snapshot/hourly.3/lib/libstdc++.so
/usr/local/.snapshot/hourly.3/lib/libstdc++.so.2.7.2
/usr/local/.snapshot/hourly.3/lib/libstdc++.a
/usr/local/.snapshot/hourly.3/lib/libstdc++.so.2.8.0
/usr/local/.snapshot/hourly.4/gnu/lib/libstdc++.a
/usr/local/.snapshot/hourly.4/lib/libstdc++.so
/usr/local/.snapshot/hourly.4/lib/libstdc++.so.2.7.2
/usr/local/.snapshot/hourly.4/lib/libstdc++.a
/usr/local/.snapshot/hourly.4/lib/libstdc++.so.2.8.0
/usr/local/.snapshot/hourly.5/gnu/lib/libstdc++.a
/usr/local/.snapshot/hourly.5/lib/libstdc++.so
/usr/local/.snapshot/hourly.5/lib/libstdc++.so.2.7.2
/usr/local/.snapshot/hourly.5/lib/libstdc++.a
/usr/local/.snapshot/hourly.5/lib/libstdc++.so.2.8.0
/usr/local/.snapshot/nightly.1/gnu/lib/libstdc++.a
所で疑問なのですが
どうして自ホームディレクトリがカレントディレクリでは上手くいきますが他ディレ
クトリにカレントディレクトリに移動しただけで探せなくなるのでしょうか?
カレントディレクトリを移動しただけでこのようになる理屈がわかりません。
___________________________
kmk...@hotmail.com
___________________________
> KMです。
なぜ、本名を出さないんですか。
> Ms/Mr Hiroshi Fujishima worte as follows.
> > shared object が見つからないからです。
> > libstdc++.so.2.8.1 があるディレクトリを環境変数 LD_LIBRARY_PATH に追加
> > しましょう。
> > LD_LIBRARY_PATH を設定する代わりにコンパイル時に -R をつけるのもよいで
> > しょう。
> 検索してみましたがこのバージョンのlibstdc++.soは見つかりませんでした。
あなたが読めないようになっているかも知れませんよ。
> 以下の様なファイルなら有りました。
>
> 所で疑問なのですが
> どうして自ホームディレクトリがカレントディレクリでは上手くいきますが他ディレ
> クトリにカレントディレクトリに移動しただけで探せなくなるのでしょうか?
>
> カレントディレクトリを移動しただけでこのようになる理屈がわかりません。
そんなことは関係ないと思いますが。たとえば、そのバイナリを自分のホーム
にコピーしたら実行できるんですか?
Hiroshi Fujishima
Ms/Mr Hiroshi Fujishima wrote as follows.
> なぜ、本名を出さないんですか。
恥ずかしいからです。
> あなたが読めないようになっているかも知れませんよ。
読めない(他ユーザからの読取り権限が無い)のなら自ホームディレクトリの自実行
ファイルでも同様のエラーが出るのでは?(勘違いしていますでしょうか)
> そんなことは関係ないと思いますが。たとえば、そのバイナリを自分のホーム
> にコピーしたら実行できるんですか?
う゛っ!!
出来ませんでした。な、何故…。
___________________________
kmk...@hotmail.com
___________________________
他の人がコンパイルしたc++のプログラムはlibstdc++が動的にリンクされていて、自分でコンパイルしたのは静的にリンクされてるんじゃない?
--
ダル <dalm...@hotmail.com>
他の人がコンパイルしたc++のプログラムはlibstdc++が動的にリンクされていて
自分でコンパイルしたのは静的にリンクされてるんじゃない?
--
ダル <dalm...@hotmail.com>
> > あなたが読めないようになっているかも知れませんよ。
> 読めない(他ユーザからの読取り権限が無い)のなら自ホームディレクトリの自実行
> ファイルでも同様のエラーが出るのでは?(勘違いしていますでしょうか)
libstdc++.so.2.8.1 を必要としていないからじゃないですか。
% ldd エラーが出ないバイナリ
とするとどうなっていますか。
> > そんなことは関係ないと思いますが。たとえば、そのバイナリを自分のホーム
> > にコピーしたら実行できるんですか?
> う゛っ!!
> 出来ませんでした。な、何故…。
関係ないからですよ。
Hiroshi Fujishima
<a1i0iq$3u9$1...@wa1.seikyou.ne.jp>の記事において
kmk...@hotmail.comさんは書きました。
> KMです。
> ご回答感謝致します。
>
> Ms/Mr Hiroshi Fujishima wrote as follows.
> > なぜ、本名を出さないんですか。
> 恥ずかしいからです。
それって
* やっていることが恥ずかしい
* 本名を出すことが恥ずかしい
のどちらでしょうか?
前者の場合(通常はこっちですよね)本名でなくても
やっていることは "恥ずかしいこと" であれば
fj のような public な場ではやらない方が良いような...
linux の話が分かっていないとかそういうことは
恥ずかしいことではありませんし質問することは
いけないことではありませんが,質問の仕方などに
少々疑問を感じます.
# こういうのって usage より policy なのかしら,
# と思ったのですが,fj.news.policy の説明文からすると
# 違うみたいですね...
--
∧∧
Zzz.. (- - )⌒⌒⊇~ 川口 銀河
############## gi...@athena.club.ne.jp
Ms/Mr ダル wrote as follows.
> 他の人がコンパイルしたc++のプログラムはlibstdc++が動的にリンクされていて
> 自分でコンパイルしたのは静的にリンクされてるんじゃない?
いえ、コンパイル法は同じ
($ g++ -o hoge hoge.cc)
なのでそんな事はありません。
Ms/Mr Hiroshi Fujishima wrote as follows.
> libstdc++.so.2.8.1 を必要としていないからじゃないですか。
> % ldd エラーが出ないバイナリ
> とするとどうなっていますか。
libstdc++.so.2.8.1 => (ファイルがありません)
libm.so.1 => /usr/lib/libm.so.1
libc.so.1 => /usr/lib/libc.so.1
libdl.so.1 => /usr/lib/libdl.so.1
となってしまいました。
因みに自ホームディレクトリで実行できるものはlddで調べて見ると
libstdc++.so.2.8.0 => /usr/local/lib/libstdc++.so.2.8.0
libm.so.1 => /usr/lib/libm.so.1
libc.so.1 => /usr/lib/libc.so.1
libdl.so.1 => /usr/lib/libdl.so.1
という風にバージョンが2.8.0なんですよね。
>> 出来ませんでした。な、何故…。
> 関係ないからですよ。
そうですよね。納得致しました。
Ms/Mr Hiroshi Fujishima wrote as follows.
> それって
> * やっていることが恥ずかしい
> * 本名を出すことが恥ずかしい
> のどちらでしょうか?
後者です。
> linux の話が分かっていないとかそういうことは
> 恥ずかしいことではありませんし質問することは
> いけないことではありませんが,質問の仕方などに
> 少々疑問を感じます.
ご迷惑お掛けしてますかもしれません。
お詫び致します。
___________________________
kmk...@hotmail.com
___________________________
= KMと申します。
=
= 大学のUNIX(SunOS 5.6 Generic sun4u sparc SUNW)に自宅からLinux(vine2.1.5)から
= telnetログインして
= g++2.8.1でコンパイルしたc++の実行ファイルを実行させてみようとしたら自ホーム
= ディレクトリ内の実行ファイルなら実行出来ましたが他人のディレクトリ下の実行
= ファイルはどれも
=
= ld.so.1: hoge: 重大なエラー: libstdc++.so.2.8.1: open に失敗しました: ファイ
= ルもディレクトリもありません。
=
= となってしまいました。
= アクセス権限は-rwxr-xr-xとなってします。
【考えられること】
1. 他人の使っているマシンは自分の使っているマシンと違う?
2. 他人はLD_RUN_PATH などの環境変数をきちんと設定している?
3. 実は他人もバイナリをどっかから拾って来ただけで動かせていない?
4. 本件はLinux のネットワークの話とは無関係である.
Newsgroups: fj.os.linux.networking,fj.unix
Followup-To: fj.unix
p.s.
= これはどうすれば一体何が原因なのでしょうか?
意味不明です….
KM wrote in <a1sbsq$ndv$1...@wa1.seikyou.ne.jp>:
・
・
> Ms/Mr ダル wrote as follows.
> > 他の人がコンパイルしたc++のプログラムはlibstdc++が動的にリンクされていて
> > 自分でコンパイルしたのは静的にリンクされてるんじゃない?
> いえ、コンパイル法は同じ
> ($ g++ -o hoge hoge.cc)
> なのでそんな事はありません。
リンク形態を確実に確認するコマンドは、lddですから、ダルさんの指摘に
対しては、lddの実行結果に基いて答えるべきです。
その後で、リンク形態が予想に反するものであったなら、コンパイルの
方法はどうだったのかと云う風に話が続くのが普通です。
実際、明示的にリンク方法を指定しなくても、一方の環境には「.so」と
「.a」が両方あり、他方の環境には「.a」ファイルしかないと云うケース
では、リンク形態が異なって来ます。また、コンパイル時の環境変数の
内容の違いでも差が生じる可能性があります。
> Ms/Mr Hiroshi Fujishima wrote as follows.
ここは、
> Ms/Mr 川口 銀河 wrote as follows.
と修正し忘れたようですね。
> > それって
・
・
> > linux の話が分かっていないとかそういうことは
> > 恥ずかしいことではありませんし質問することは
> > いけないことではありませんが,質問の仕方などに
> > 少々疑問を感じます.
> ご迷惑お掛けしてますかもしれません。
> お詫び致します。
河口さんは、KMさんの記事から、ご自分で考えて問題を解決
しようとする姿勢が見えて来ない事を問題にしていたかと
思います。
河口さんの指摘に従って、lddやfileのmanを読まれたりは
されたのでしょうか。(ldもあやしそうなので、読んだ方が
良いでしょう。)
読まれていれば、今回の記事の中に「ようやく理由が
分かりました。」と云うような一文が含まれていそうな
ものなのですが、KMさんにとって問題は、解決されたの
でしょうか、まだなのでしょうか。
--
関@神奈川
Masao Seki <ma-...@gb3.so-net.ne.jp>
河口さん --> 川口さん
わあーー。川口さん、御免なさい。