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