Chinaunix

标题: GLIBC版本兼容问题。。。。。。。。。。。。。。 [打印本页]

作者: eyesea    时间: 2008-09-03 11:03
标题: GLIBC版本兼容问题。。。。。。。。。。。。。。
问题的由来:
我执行一段CGI,出现下列错误:
./getpoint.cgi: /lib/libgcc_s.so.1: version `GLIBC_2.0' not found (required by /
usr/lib/libneo_cgi.so)
./getpoint.cgi: /lib/libgcc_s.so.1: version `GLIBC_2.0' not found (required by /
usr/lib/libneo_utl.so)
./getpoint.cgi: /lib/libgcc_s.so.1: version `GLIBC_2.0' not found (required by /
usr/lib/libneo_cs.so)

现在系统/lib下面GLIBC相关如下
-rwxr-xr-x 1 root root 1513358 Apr 22  2006 libc-2.4.so
-rwxr-xr-x 1 root root     175 Sep  2 11:52 libc.so
lrwxrwxrwx 1 root root      11 Sep  2 11:54 libc.so.6 -> libc-2.4.so

按照上面程序错误的提示,我应该有libc-2.2.*.so的库吧,
怎么能让两个版本的GLIBC库共存阿
谢谢
作者: freearth    时间: 2008-09-03 11:32
将另外一个版本的Glibc安装在别的目录,比如/usr/local/lib/glibc-xxxx,然后,在你执行程序的时候,为这个程序设置一个环境变量LD_LIBRARY_PATH,这里面包含所有的库的路径,但是,/usr/local/lib/glibc-xxxx路径必须在/lib目录的前面。
这样做有一个前提,那就是你的程序所有直接或间接用到的glibc的动态库,都只用旧版的。如果某个额外的动态库用到了新版的glibc,它是找不到的。
PS:这个环境变量只给你这个程序设,千万不要设成系统的默认环境变量。比如,你可以这样运行程序:

命令行$  LD_LIBRARY_PATH=XXX:XXX:XX ./getpoint.cgi

原帖由 eyesea 于 2008-9-3 11:03 发表
问题的由来:
我执行一段CGI,出现下列错误:
./getpoint.cgi: /lib/libgcc_s.so.1: version `GLIBC_2.0' not found (required by /
usr/lib/libneo_cgi.so)
./getpoint.cgi: /lib/libgcc_s.so.1: version  ...

作者: eyesea    时间: 2008-09-03 14:06
非常感谢楼上的回答。
我现在是把以前的应用程序移植到新的linux平台上。应用程序的部分不能改太多。
如果按照楼上的方法,我每次调用cgi都要引入一次环境变量。有点麻烦。

其实上面需要不同版本BLIBC的软件是clearsilver,一个web模板库,就是所有的
cgi都用到它,不太可能每次执行cgi都指明一个GLIBC库阿
作者: freearth    时间: 2008-09-03 14:27
首先,更好的办法更新了你的clearsilver库。
否则的话,你可以写一个简单的shell脚本。在这个脚本中设置环境变量并调用指定的程序。

$ run.sh  xxx.cgi

如果这些程序是自动调用的,那么把xxx.cgi的名字换成xxx1.cgi,把那个脚本的名字换成xxx.cgi

原帖由 eyesea 于 2008-9-3 14:06 发表
非常感谢楼上的回答。
我现在是把以前的应用程序移植到新的linux平台上。应用程序的部分不能改太多。
如果按照楼上的方法,我每次调用cgi都要引入一次环境变量。有点麻烦。

其实上面需要不同版本BLIBC的软 ...





欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2