0

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

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

错误

/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
4

1 回答 1

2

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

维护 ExtUtils::MakeMaker 的人对路径名的处理进行了更改(我忘记了究竟是哪一个;我认为这是make宏的值FULLPATH),他们现在将其括在双引号中,这显然与他们的预期无关使用该值,但它破坏了 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 $opts{LD}
-$opts{LD} = "INFORMIXC='\$(FULLPERL) esqlld' " .
+$opts{LD} = "INFORMIXC=\"\$(FULLPERL) esqlld\" " .
             "ESQLLD='$Config{ld} \$(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-08-26,DBD::Informix 版本 2015.0826 发布并上传到 CPAN。这包含了对上述补丁规避的问题的永久修复(更改更重要,但在大多数方面也更安全)。

于 2015-08-20T22:53:24.583 回答