solaris – libstdc .so.6:open failed:没有这样的文件或目录

我正在尝试在Solaris上运行我的第一个C程序.只是一个简单的Hello World程序.当我试图跑.我收到错误libstdc .so.6:open failed:没有这样的文件或目录.当然我做了一些谷歌搜索,发现我可以通过设置环境变量来解决这个问题:

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++

以上是一个更好的选择,因为二进制文件可以在其他系统上工作,而无需调整链接器路径.

上一篇:java – 意外的字符串concat行为


下一篇:POJ1958 Strange Tower of Hanoi(4塔汉诺塔)