在上一篇中对相关情况进行了描述,通过CPAN自动安装模块DBD::Oracle时报错,无法正常安装,已找到解决方法,具体情况如下:
1、第一次安装时,根据错误提示,确认为ORACLE_HOME没有设置,导致在加载时随意设置了oracle的目录,导致相关东西找不到。
2、在系统环境变量中添加ORACLE_HOME后,仍旧报错。原因为:没有关闭窗口,重新打开,导致增加的环境变量没有起作用
3、增加进环境变量后,执行安装模块命令,可以进行安装,但在安装过程中报错:提示...\oracle.dll
DLL load failed: %1 不是有效的 Win32 应用程序。 (关键问题在这)
3.1 第一次处理,路过test,直接强制安装模块cpan>force install DBD::Oracle,模块是可以安装上,但在使用时,仍会执行test报错,无法运行perl程序
3.2 通过网上查找,得知模块加载编译有两种方式:一种是纯Perl写的,没有依赖性,不需要编译。一种是C/C++写的,需要链接库文件进行编译。DBD::Oracle是后者。而报错信息为,无法加载oracle.dll文件,使用的加载程序为oracle下的,所以想到是加载程序有问题(因为模块存在),而oracle_home是设置了的。经过多方面查找,想到了版本问题。
本机为64位,当初安装oracle10g时未注意到版本,而strawberry perl下载安装的为64位。进入数据库查看:sql>select * from v$version; 看到win-32bit,意识到是数据库版本与perl版本不一致,导致在使用oracle下的工具来加载文件oracle.dll时,无法加载,报错。
解决方法:重新安装oracle为64位,重新设置oracle_home,没有报无法加载oracle.dll,此报错解决。
http://tonyqiu.iteye.com/blog/1296583
然在test时,又出现新问题,在执行时,会导致perl崩溃,以下几个地方失败,最后:test not OK
(这几个地方失败,不影响DBD::Oracle的使用)失败的原因还有待查明。
t/30long.t .................... 95/479
# Failed test 'blob_read_all = length($long_data[0])'
# at t/30long.t line 274.
# got: 0
# expected: 10240
# Failed test 'Strings are of different lengths (0 vs 10240)'
# at t/30long.t line 276.
# Failed test 'fetchrow_arrayref 2: select idx, lng, dt from dbd_ora__drop_me order by idx'
# at t/30long.t line 280.
t/30long.t .................... Dubious, test returned 5 (wstat 1280, 0x500)
Failed 156/479 subtests