我正在尝试在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++
以上是一个更好的选择,因为二进制文件可以在其他系统上工作,而无需调整链接器路径.