ykwll 发表于 2018-8-31 07:01:21

perl通过CPAN安装DBD::Oracle时出错(2)

  在上一篇中对相关情况进行了描述,通过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)'
  #   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>  #   at t/30long.t line 280.
  t/30long.t .................... Dubious, test returned 5 (wstat 1280, 0x500)
  Failed 156/479 subtests

页: [1]
查看完整版本: perl通过CPAN安装DBD::Oracle时出错(2)