libstdc++.so.6: オープンに失敗しました: ファイルまたはディレクトリが存在しません。

libstdc++.so.6: オープンに失敗しました: ファイルまたはディレクトリが存在しません。

私はSolarisで最初のC ++プログラムを実行しようとしています。単純なHello Worldプログラムです。私が走ろうとしているとき。エラーが発生しましたlibstdc++.so.6:open failed:No such file or directory。もちろん、インターネット検索をしてみると、環境変数を設定するとこの問題を解決できることがわかりました。

export LD_LIBRARY_PATH=/usr/local/lib

再度ログインした後、これが永続的な解決策ではないことがわかりました。私はこれがコンパイル中にlibstdc ++.so.6をリンクすることに関連していると思います。最初から私が行ったステップは次のとおりです。

bash-3.2# gcc -c test.cpp

bash-3.2# gcc -o test test.o -lstdc++

bash-3.2# ./test
   libstdc++.so.6:open failed:No such file or directory

bash-3.2# ldd test | grep not
   libstdc++.so.6 =>        (file not found)

bash-3.2# /usr/ccs/bin/elfdump test | grep RUNPA

bash-3.2# find /usr -name libstdc++.so.6
   /usr/local/lib/libstdc++.so.6

コンパイル中にフラグなどを見逃しましたか?プログラムの実行時にどこを見るのかを知るためにソフトリンクを作成するにはどうすればよいですか?

私が使用しているプラ​​ットフォームは次のとおりです。

bash-3.2# uname -a
   SunOS ms-sparc8 5.8 Generic_108528-13 sun4u sparc SUNW,Sun-Blade-100

bash-3.2# gcc -v
   Reading specs from /usr/local/lib/gcc-lib/sparc-sun-solaris2.8/3.3.2/specs
   Configured with: ../configure --with-as=/usr/ccs/bin/as --with-ld=/usr/ccs/bin/ld --disable-nls --disable-libgcj --enable-languages=c,c++
   Thread model: posix
   gcc version 3.3.2

ベストアンサー1

Solarisランタイムリンカ検索パスを設定する最も簡単な方法はを使用することですcrle。ただし、システムがハングアップするとシステムを簡単に使用できなくなる可能性があるため、これを行うときは非常に注意する必要があります。/usr/local/binリンカーパスに追加:

# crle -u -l /usr/local/lib

これを完了したら、直接ダイヤルcrleして新しい検索パスを確認してください。

別のアプローチは、パスをバイナリ自体にコンパイルすることです。

$ gcc -Wl,-rpath,/usr/local/lib -o test test.o -lstdc++

リンカパスを調整しなくてもバイナリは他のシステムで動作するため、上記のオプションはより良いオプションです。

おすすめ記事