1 问题的提出
我有一个二进制程序GraphGen,在Solaris 8 SPARC 操作系统下运行得到的错误提示如下:
# ./GraphGen
ld.so.1: ./GraphGen: fatal: libstdc++.so.2.10.0: open failed: no such file or directory
显而易见,这个错误产生的原因是在当前的操作系统中缺失共享库文件libstdc++.so.2.10.0。该库文件是GNU gcc 编译器中含有的一个文件,而gcc 编译器在Solaris 8 SPARC 中并不是默认安装的,只有安装相应版本的gcc 编译器,该库文件才会附带安装上。
# ./GraphGen
ld.so.1: ./GraphGen: fatal: libstdc++.so.2.10.0: open failed: no such file or directory
显而易见,这个错误产生的原因是在当前的操作系统中缺失共享库文件libstdc++.so.2.10.0。该库文件是GNU gcc 编译器中含有的一个文件,而gcc 编译器在Solaris 8 SPARC 中并不是默认安装的,只有安装相应版本的gcc 编译器,该库文件才会附带安装上。
2 解决方案
按照上面的思路,为了补上缺失的库文件,我试着安装了几个不同版本的gcc 编译器,得到的结论如下:较新版本的gcc-3.4.6-sol8-sparc-local.gz 安装后,在其中的/usr/local/lib 中并不含有libstdc++.so.2.10.0 库文件;只有安装较旧版本的gcc 2.95.x 系列的编译器才会具备libstdc++.so.2.10.0 库文件。下面讲解gcc2.95.x 系列编译器的安装方法。
步骤如下:
步骤如下:
1. 从网站http://ftp.ussg.iu.edu/solaris/freeware/sparc/8/ 上面下载文件gcc-2.95.1-sol8-sparc-local.gz,即gcc 2.95.1版本的编译器(你也可以选择其他版本的编译器,只要符合 gcc 2.95.x 即可)。
2. 将上述安装文件放到某个文件夹下,执行命令
gunzip gcc-2.95.1-sol8-sparc-local.gz
你会发现在那个文件夹下出现一个解压缩的文件gcc-2.95.1-sol8-sparc-local。
2. 将上述安装文件放到某个文件夹下,执行命令
gunzip gcc-2.95.1-sol8-sparc-local.gz
你会发现在那个文件夹下出现一个解压缩的文件gcc-2.95.1-sol8-sparc-local。
3. 执行命令安装gcc 2.95.1 编译器
pkgadd -d gcc-2.95.1-sol8-sparc-local
在安装的过程中,如果系统中先前没有文件夹/usr/local/lib 等相关的文件夹,会询问你是否建立这些文件夹,回答y 即可。安装结束后,会提示安装成功,如图1。
pkgadd -d gcc-2.95.1-sol8-sparc-local
在安装的过程中,如果系统中先前没有文件夹/usr/local/lib 等相关的文件夹,会询问你是否建立这些文件夹,回答y 即可。安装结束后,会提示安装成功,如图1。
Figure 1: gcc 2.95.1 编译器安装和设置过程截图
4. 上面步骤都是在root 用户下执行的操作,而root默认的shell 是sh;接下我们还需要设置环境变量。设置环境变量的命令需要在bash 下执行,所以我另外新建了一个用户cgz,设置它的默认的shell 为bash (关于如何在Solaris 8 SPARC 下新建用户及设置默认的shell,请参见前面的博文)。退出当前root用户,改用cgz用户登录,执行如下命令:
export PATH=$PATH:/usr/local/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
然后,执行命令gcc -v 来验证设置环境变量是否成功。所有这些操作,请参见图1。
export PATH=$PATH:/usr/local/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
然后,执行命令gcc -v 来验证设置环境变量是否成功。所有这些操作,请参见图1。
执行完上面的步骤后,libstdc++.so.2.10.0 库文件缺失的问题就自然而然地解决了。
3 顺利执行程序GraphGen
在Solaris 8 SPARC 系统下的Terminal 中输入命令GraphGen -help,该命令成功执行。这就证明了程序GraphGen可以顺利运行了,如图2。我的心中有了些许的成就感。Have a fun!
Figure 2: 成功运行程序GraphGen
4 致谢
非常感谢http://ftp.ussg.iu.edu/solaris/freeware/sparc/8/ 提供的gcc 2.95.1 编译器安装包,因为www.sunfreeware.com 下已不在提供安装包服务,转到了另外一个收费的网站打理;非常感谢博文《Rose RealTime: rtrun: fatal: libstdc++.so.2.10.0: open failed》(http://www-01.ibm.com/support/docview.wss?uid=swg21191467)和《Solaris下gcc安装》 (http://blog.csdn.net/sipsir/article/details/3973705)提供的思路,让我能够顺利解决这个问题;同时也感谢大量的也该问题相关的从Google里搜索出来的帖子,虽然它们不能直接解决我所面临的问题,但促进了我的思考,让我一步步地向目标迈进。