安装 DBD::Informix 模块时出错
Make error installing DBD::Informix module
我是 运行 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
我是 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。这包含了对上述补丁所回避的问题的永久修复(更改更重要,但在大多数方面也更安全)。
我是 运行 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
我是 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。这包含了对上述补丁所回避的问题的永久修复(更改更重要,但在大多数方面也更安全)。