安装 DBD::Informix 模块时出错

Posted

技术标签:

【中文标题】安装 DBD::Informix 模块时出错【英文标题】:Make error installing DBD::Informix module 【发布时间】:2015-08-20 17:41:01 【问题描述】:

我在 DBD::Informix 模块上运行 make 并且我收到一个错误,它无法创建 Informix.so 文件。如果您看一下它为make 执行的第一步,它会删除原始的Informix.so 文件。但它看起来像一个值为"/usr/bin/perl" 的环境变量被附加到路径中,因此它无法创建(制作)新的Informix.so 文件。

有人见过这个吗?看起来 INFORMIXC 是附加到它的变量。我可以改变这个吗?我尝试了来自 CPAN 的 article 中的建议并降级到该模块但没有运气。

错误

/opt/informix/bin/esql: line942: /home/pdoug/.cpan/sources/authors/id/J/JO/JOHNL/DBD-Informix-2013.0521/"/usr/bin/perl": No such file or directory
make: *** [blib/arch/auto/DBD/Informix/Informix.so] Error 127



[root@sandbox-support DBD-Informix-2013.0521]# make
rm -f blib/arch/auto/DBD/Informix/Informix.so
INFORMIXC='"/usr/bin/perl" esqlld' ESQLLD='gcc -shared -O2 -g -pipe -Wall   -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-  buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -Wl,-z,relro ' esql    -shared -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-    protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64   -mtune=generic -Wl,-z,relro  Informix.o dbdimp.o dbdattr.o sqltoken.o sqltype.o ixblob.o odbctype.o kludge.o link.o esqlcver.o esqlc_v6.o  -o  blib/arch/auto/DBD/Informix/Informix.so      \

按照类似问题的建议安装了 6.66 版,但没有解决问题

Writing /root/.cpan/Metadata

ExtUtils::MakeMaker

    (no description)
    B/BI/BINGOS/ExtUtils-MakeMaker-7.04.tar.gz
    /root/perl5/lib/perl5/ExtUtils/MakeMaker.pm
    Installed: 6.66
    CPAN:      7.04  Not up to date
    Chris Williams (BINGOS)
    chris@bingosnet.co.uk

【问题讨论】:

/home/pdoug/.cpan/sources/authors/id/J/JO/JOHNL/DBD-Informix-2013.0521/"/usr/bin/perl" 看起来很有趣。那应该是寻找 perl 可执行文件的地方吗? 它是 Makefile.pl 所在的位置,我在指向该路径的 bash_profile 中构建了自己的环境变量。但它不应该与安装冲突。 你设置了什么环境变量?通常不会指向 cpan tarball 源代码树下的内容,而是使用 cpan shell look Module::Name 手动操作正在构建的特定 perl 模块。 只是一个叫做 $INFORMIX_MODULE 的东西。 我自己的快捷方式。 【参考方案1】:

我是 DBD::Informix 的维护者。这是我(不舒服地)意识到的一个问题。

维护 ExtUtils::MakeMaker 的人对路径名的处理进行了更改(我忘记了到底是哪一个;我认为这是 makeFULLPATH 的值),他们现在用双引号将其括起来这显然与他们对该值的预期用途无关,但它破坏了 DBD::Informix。当我开始使用 DBD::Informix 时(在上个千年末的某个时候),有各种各样的怪事需要处理。仍然有可能,其中的数量适中。所以我有一个复杂的系统来围绕人们使用 GCC 构建 Perl 但 ESQL/C 产品期望使用替代编译器这一事实进行编码。所述解决方法在 1997 年至 2014 年左右运行良好;它现在已经坏了。我对此不高兴。我还没有找到很好的解决方案。

如果您不介意成为豚鼠,您可以制作Makefile.PL 的备份副本,然后对其应用此补丁:

patch --dry-run --verbose <<'EOF'
--- Makefile.PL 2013/05/22 05:40:27 2013.5
+++ Makefile.PL 2015/08/20 22:40:59
@@ -710,7 +710,7 @@
 # the files list...

 # Default version of $optsLD
-$optsLD = "INFORMIXC='\$(FULLPERL) esqlld' " .
+$optsLD = "INFORMIXC=\"\$(FULLPERL) esqlld\" " .
             "ESQLLD='$Configld \$(LDDLFLAGS)' \$(ESQL)";

 my $esql_nt = "";
EOF

上面的patch 代码进行了试运行;它检查是否可以应用补丁。如果可行(没有警告或错误),则删除 --dry-run 选项。然后运行正常的构建过程:

perl Makefile.PL &&
make &&
make test &&
: make install  # If you're brave; eventually, you do make install

修改后的Makefile.PL 似乎对我有用(Mac OS X 10.10.0 上的 Perl 5.22.0,带有 CSDK 3.70.FC4),但我还不确定它是否符合犹太教规。它的作用是给你两个相邻的双引号,shell 映射到一个空(和无引号)字符串。

更新:DBD::Informix 版本 2015.0826 发布

2015 年 8 月 26 日,DBD::Informix 版本 2015.0826 发布并上传到 CPAN。这包含了对上述补丁规避的问题的永久修复(更改更重要,但在大多数方面也更安全)。

【讨论】:

很荣幸得到您的帮助,谢谢。 Makefile.PL 中是否有推荐的地方可以放置它?将其附加在最底部? 获取答案中显示的代码(复制和粘贴)并将其放入Makefile.PL for DBD::Informix 所在目录中的文件script.sh 中。运行sh script.sh。如果没有错误消息,则编辑脚本文件并删除--dry-run 标志并重新运行脚本。然后再次尝试构建。 或者,手动编辑Makefile.PL 并将显示的行从它当前的样子(开头带有减号的行;忽略减号)更改为它应该看起来的样子(带有开头的加号;忽略加号)。 patch 程序会自动应用该编辑,这就是我建议它的原因。 感谢乔纳森,修复了错误,我可以继续在我们的 Linux 服务器上安装模块!!!!!!太棒了!

以上是关于安装 DBD::Informix 模块时出错的主要内容,如果未能解决你的问题,请参考以下文章

通过 ip:port 使用 Perl DBI 连接到 Informix

安装VPN时提示“安装Hillstone virtual network driver错误”,台式机可以,笔记本出错。

安装 CRM 模块时出错

安装 python 模块时出错

Google Glass - 安装 APK 时出错

加载 MySQLdb 模块时出错。你安装了mysqlclient吗?在 MacOS 上