64位Linux系统下Not able to load mod_wl_20.so问题解决办法总结

来源:互联网 发布:怪物猎人3g多玩数据库 编辑:程序博客网 时间:2024/06/06 18:20

今天在做一个环境迁移的时候,遇到了weblogic的Not able to load mod_wl_20.so问题,解决后,总结一下,是以为记。


通常做apache和WebLogic集成时碰到最多的问题是Not able to load mod_wl_20.so,如:
$
${PREFIX}/httpd -t
Syntax error on line 1083 of /home/test/apache2/conf/httpd.conf:
Cannot load /home/test/apache2/modules/mod_wl_20.so into server: /home/test/apache2/modules/mod_wl_20.so: cannot open shared object file: No such file or directory

 

总结该问题,可能的原因有如下几种:

 

1、apache编译安装时未指定动态加载DSO模块,故无法动态加载mod_wl_20.so模块

 

解决办法:编译安装时指定即可,如--enable-shared=max --enable-module=rewrite --enable-module=so

 

2、mod_wl_20.so文件不存在于${PREFIX}/modules下

 

解决办法:从对应的WebLogic服务所在机器上找到对应操作系统和位数的mod_wl_20.so至${PREFIX}/modules下

 

3、mod_wl_20.so有问题,如mod_wl_20.so文件与apache所在机器系统、位数不一致

 

以上2种可能比较不容易犯,因此最常见的原因是这种可能。
本例中以apache2.0.59+redhatAS4_X86_64集成WebLogic815为例说明
WebLogic815下的mod_wl_20.so对应的Linux下的so如下:
weblogic81/server/lib/linux/i686/mod_wl_20.so
weblogic81/server/lib/linux/s390/mod_wl_20.so
weblogic81/server/lib/linux/ia64/mod_wl_20.so
查看对应的ia64下的mod_wl_20.so如下:
$file weblogic81/server/lib/linux/ia64/mod_wl_20.so
weblogic81/server/lib/linux/ia64/mod_wl_20.so: ELF 64-bit LSB shared object, IA-64, version 1 (SYSV), not stripped

 

注意“IA-64”就是“64位的英特尔架构” 的CPU, IA-64微处理器最大的缺陷是它们缺乏与x86的兼容,所以他是不能用于x86_64的服务器上的。


也就是说,在类似如下的机器中:
$uname -a
Linux localhost.localdomain 2.6.9-42.ELsmp #1 SMP Wed Jul 12 23:32:02 EDT 2006 x86_64 x86_64 x86_64 GNU/Linux
是用不了64位的mod_wl_20.so的。因此,解决的方法之一是,使用32位的apache加载32位的mod_wl_20.so(网上未找到WebLogic815版本x86_64下的mod_wl_20.so)

 

解决办法:使用32位的apache加载32位的mod_wl_20.so

使用以上方法测试通过的各环境说明如下:
1、apache所在机器系统:
$ uname -a
Linux localhost.localdomain 2.6.9-42.ELsmp #1 SMP Wed Jul 12 23:32:02 EDT 2006 x86_64 x86_64 x86_64 GNU/Linux
2、httpd:
$file ./httpd
./httpd: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.2.5, dynamically linked (uses shared libs), not stripped
3、httpd库依赖
$ ldd ./httpd
        linux-gate.so.1 =>  (0xffffe000)
        libexpat.so.0 => /usr/lib/libexpat.so.0 (0x00d03000)
        librt.so.1 => /lib/tls/librt.so.1 (0xf7fb9000)
        libm.so.6 => /lib/tls/libm.so.6 (0x00a70000)
        libcrypt.so.1 => /lib/libcrypt.so.1 (0xf7f8b000)
        libnsl.so.1 => /lib/libnsl.so.1 (0xf7f75000)
        libpthread.so.0 => /lib/tls/libpthread.so.0 (0x00aa5000)
        libdl.so.2 => /lib/libdl.so.2 (0x00a95000)
        libc.so.6 => /lib/tls/libc.so.6 (0x00943000)
        /lib/ld-linux.so.2 (0x0092a000)
4、mod_wl_20.so位数:
weblogic81/server/lib/linux/i686/mod_wl_20.so
$ file mod_wl_20.so
mod_wl_20.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), not stripped
5、mod_wl_20.so库依赖
$ ldd mod_wl_20.so
        linux-gate.so.1 =>  (0xffffe000)
        libc.so.6 => /lib/tls/libc.so.6 (0xf7dec000)
        /lib/ld-linux.so.2 (0x56555000)

PS:
google上找了一下没有找到weblogic815下的x86_64的mod_wl_20.so。猜测原因是:
1999年,英特尔推出IA-64架构的第一颗处理器;
检查weblogic81/common/help/doc/en/cfgwizhelp/intro.html发现日期:
<meta name="LASTUPDATED" content="08/29/05 12:08:55" />
因此估计是815发布时x86_64架构的CPU还没有问世的缘故。

看到一个帖子中是这样说的:
****************************帖子说开始****************************************************
目前的weblogic8或9下的,只有支持apahce2.0.x的。所以liunx自带的apahce2.2.x不能用。要重装

apahce2.0.x

mod_wl_20.so分为两种,一种是64位和32位。


32位可以在wbelogic下的/weblogic81/server/lib/linux/i686/mod_wl_20.so下边找到。
也存在32位
只可以从weblogic920下的weblogic92/server/plugin/linux/x86_64/mod_wl_20.so

weblogic安装的时间一定要选上plugin插件:才会有mod_wl_20.so这模块
64位,只能从weblogic920下的weblogic92/server/plugin/linux/x86_64/mod_wl_20.so

注意,目前weblogic8或9只支持apahce 2.0.X ,这个mod_wl_20.so不管是weblogic8还weblogic9都

可以通用。

已验证,apahce2.0.X可以跟webloigc8或9结合,是32位或64位都可以。

****************************帖子说结束****************************************************
由于本地测试环境只有weblogic815和weblogic10.3,都没有找到x86_64的mod_wl_20.so,故以上帖子的说法未验证。