Solaris
libstdc++.so.6:打開失敗:沒有這樣的文件或目錄
我正在嘗試在 Solaris 上執行我的第一個 C++ 程序。只是一個簡單的 Hello World 程序。當我嘗試跑步時。我得到錯誤
libstdc++.so.6:open failed:No such file or directory
。當然我做了一些Google搜尋,發現我可以通過設置環境變數來解決這個問題: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
設置 Solaris 執行時連結器搜尋路徑的最簡單方法是使用
crle
,但這樣做時需要非常小心,因為如果您破壞了系統,很容易使系統無法使用!要添加/usr/local/bin
到連結器路徑:# crle -u -l /usr/local/lib
完成此操作後,請
crle
自行呼叫以驗證新的搜尋路徑。另一種方法是將路徑編譯成二進製文件本身:
$ gcc -Wl,-rpath,/usr/local/lib -o test test.o -lstdc++
以上是一個更好的選擇,因為二進製文件可以在其他系統上工作,而無需調整連結器路徑。