我在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
(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
答案 0 :(得分: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将它映射到一个空的(无引号)字符串。
2015-08-26,DBD :: Informix版本2015.0826发布并上传至CPAN。这包含应该是上述补丁所避免的问题的永久性解决方案(更改更重要,但在大多数方面也更安全)。