DBD::由于在Strawberry Perl上使用cpan进行测试,DB2安装失败



我对perl非常陌生,我正试图使用cpan在windows PC上安装用于perl的DBD::DB2模块,但我一直收到这个错误:

CPAN: CPAN::SQLite loaded ok (v0.212)
Database was generated on Thu, 06 Dec 2018 20:55:19 GMT
Running install for module 'DBD::DB2'
CPAN: Digest::SHA loaded ok (v6.02)
CPAN: Compress::Zlib loaded ok (v2.081)
Checksum for D:STRAWB~1cpansourcesauthorsidIIBIBMTORDB2DBD-DB2-1.85.tar.gz ok
CPAN: Archive::Tar loaded ok (v2.32)
CPAN: YAML::XS loaded ok (v0.75)
CPAN: CPAN::Meta::Requirements loaded ok (v2.140)
CPAN: Parse::CPAN::Meta loaded ok (v2.150010)
CPAN: CPAN::Meta loaded ok (v2.150010)
Configuring I/IB/IBMTORDB2/DBD-DB2-1.85.tar.gz with Makefile.PL
Configuring DBD::DB2...
Remember to actually read the README and CAVEATS files!
Using DB2 in "D:/SQLLIB"
System: perl5.028001 DBI1.642 Win32 strawberry-perl 5.28.1.1 #1 Sun Dec  2 14:24:00 2018 x64 MSWin32-x64-multi-thread dl_win32.xs
Compiler: gcc -s -O2  -s -O2 -DWIN32 -DWIN64 -DCONSERVATIVE -D__USE_MINGW_ANSI_STDIO -DPERL_TEXTMODE_SCRIPTS -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -DUSE_PERLIO -fwrapv -fno-strict-aliasing -mms-bitfields
Includes:  -I"D:/SQLLIB/include" -I"D:STRAWB~1perlsitelib/auto/DBI" -I"D:STRAWB~1perllib/auto/DBI" -I"D:STRAWB~1perlvendorlib/auto/DBI" -I"D:STRAWB~1perlsitelib/auto/DBI" 
Libraries: -L"D:/SQLLIB/lib" db2cli.lib db2api.lib
Checking if your kit is complete...
Looks good
Checking if your kit is complete...
Looks good
Writing MYMETA.yml and MYMETA.json
Generating a gmake-style Makefile
Writing Makefile for DBD::DB2
Writing MYMETA.yml and MYMETA.json
IBMTORDB2/DBD-DB2-1.85.tar.gz
D:Strawberryperlbinperl.exe Makefile.PL -- OK
Running make for I/IB/IBMTORDB2/DBD-DB2-1.85.tar.gz
CPAN: Module::CoreList loaded ok (v5.20181130)
cp DB2.pm bliblibDBDDB2.pm
cp DB2.pod bliblibDBDDB2.pod
cp lib/Bundle/DBD/DB2.pm bliblibBundleDBDDB2.pm
gmake[1]: Entering directory 'D:/STRAWB~1/cpan/build/DBD-DB2-1.85-10/Constants'
AutoSplitting ..bliblibDBDDB2Constants.pm     (..bliblibautoDBDDB2Constants)
Running Mkbootstrap for Constants ()
"D:Strawberryperlbinperl.exe" -MExtUtils::Command -e chmod -- 644     "Constants.bs"
"D:Strawberryperlbinperl.exe" -MExtUtils::Command::MM -e cp_nonempty -- Constants.bs    ..blibarchautoDBDDB2ConstantsConstants.bs 644
"D:Strawberryperlbinperl.exe"    "D:StrawberryperllibExtUtils/xsubpp"  -typemap   D:STRAWB~1perllibExtUtilstypemap  Constants.xs > Constants.xsc
"D:Strawberryperlbinperl.exe" -MExtUtils::Command -e mv -- Constants.xsc Constants.c
gcc -c -I"D:/SQLLIB/include" -I"D:STRAWB~1perlsitelib/auto/DBI" -I"D:STRAWB~1perllib/auto/DBI" -I"D:STRAWB~1perlvendorlib/auto/DBI" -I"D:STRAWB~1perlsitelib/auto/DBI"   -I"D:/SQLLIB/include" -s -O2 -DWIN32 -DWIN64 -DCONSERVATIVE -D__USE_MINGW_ANSI_STDIO -DPERL_TEXTMODE_SCRIPTS -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -DUSE_PERLIO -fwrapv -fno-strict-aliasing -mms-bitfields -s -O2   -DVERSION="1.85" -DXS_VERSION="1.85"  "-ID:STRAWB~1perllibCORE" -   DDB2_CACHE_FIX    Constants.c
gmake[1]: Leaving directory 'D:/STRAWB~1/cpan/build/DBD-DB2-1.85-10/Constants'
IBMTORDB2/DBD-DB2-1.85.tar.gz
D:STRAWB~1cbingmake.exe -- NOT OK
Stopping: 'install' failed for 'DBD::DB2'.

我试图从另一台计算机复制DBD::DB2模块,但没有成功,并出现错误。在@INC中找不到模块DBD:感谢您的帮助。

根据这位技术专家的说法,IBM India(可能是DBD:DB2的维护者(使用ActiveState Perl支持DBD:DB2 for Windows。该技术说明还展示了如何使用ppm来获得预构建的模块。

如果您不关心哪个Perl供应商,可以考虑使用Activestate Perl for Windows。如果您必须坚持使用Strawberry Perl,请继续阅读。

当前的V11.1 Db2 LUW文档还说,除了ActiveState Perl之外,32位Strawberry Perl还支持以下语句:

与Db2一起工作的Perl的工作版本是Activestate Perl和32位Strawberry Perl。特别是对于32位Strawberry Perl,你必须发送电子邮件opendev@us.ibm.com或联系IBM支持部门必需的二进制文件。

如果您有Db2的支持合同,您可能需要与他们核实Db2文档是否准确(通常对于非核心内容,它是不准确的、过时的、误导性的等(,以及他们是否可以为DBD::Db2发布64位二进制文件。

查看CPAN页面以了解对DBD:DB2的更改,最近的更改似乎发生在2012年。因此,目前尚不清楚该模块是否得到维护。

在同一个站点上,还报告了2013年出现的一个问题,即DBD:DB2无法使用Strawberry perl构建。

我相信一个坚定的C程序员能够解决这个问题。。。问题是是否有足够的用户来打扰。。。

我找到了一个解决方案,只需插入以下文件即可:

  • 常量/常量.xs
  • DB2.h
#ifndef __DBD_DBI_FIX__
#define __DBD_DBI_FIX__
#include <specstrings.h>
#ifndef __out_ecount_opt
#define __out_ecount_opt    SAL__out_ecount_opt
#endif
#ifndef __in_ecount_opt
#define __in_ecount_opt  SAL__in_ecount_opt
#endif
#ifndef __out_bcount_opt
#define __out_bcount_opt    SAL__out_bcount_opt
#endif
#endif

完整的修复方法如下:https://github.com/ro-ag/DBD-DB2-1.86/commit/1ad9d4163656d9830fd567caf6d57603045ee392

您也可以直接从我为Windows 10创建的PPM包中安装它:https://github.com/ro-ag/Perl-64-PPM/raw/master/PPM-64/DBD-DB2.tar.gz

cpan模块被遗忘了——我已经向IBM发送了几封电子邮件来包含此修复程序,但没有成功。

不是一个答案,而是一个问题。您的DBD-DB2-tar.gz缺少草莓perl安装所需的PPD文件。

最新更新