Solaris

libstdc++.so.6:打開失敗:沒有這樣的文件或目錄

  • June 11, 2020

我正在嘗試在 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++

以上是一個更好的選擇,因為二進製文件可以在其他系統上工作,而無需調整連結器路徑。

引用自:https://unix.stackexchange.com/questions/128632