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 を使い始めたとき (2000 年の終わり頃)、対処しなければならないあらゆる種類の奇妙さがありました。おそらく、まだそこそこの数があります。だから私は、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 を使用)。これが行うことは、シェルが空の (引用符のない) 文字列にマップする 2 つの隣接する二重引用符を提供することです。

更新: DBD::Informix バージョン 2015.0826 がリリースされました

2015 年 8 月 26 日、DBD::Informix バージョン 2015.0826 がリリースされ、CPAN にアップロードされました。これには、上記のパッチによって回避された問題に対する永続的な修正が組み込まれています (変更はより重要ですが、ほとんどの点でより安全でもあります)。

于 2015-08-20T22:53:24.583 に答える