1

cygwinを使用してWindowsでenc2ly(http://enc2ly.sourceforge.net/en/)をコンパイルしようとしていますが、エラーが発生します。を入力する./configureと、結果は次のようになります。

checking for a BSD-compatible install... /usr/bin/install -c  
checking whether build environment is sane... yes  
checking for a thread-safe mkdir -p... /usr/bin/mkdir -p  
checking for gawk... gawk  
checking whether make sets $(MAKE)... yes  
checking build system type... i686-pc-cygwin  
checking host system type... i686-pc-cygwin  
checking for gcc... gcc  
checking whether the C compiler works... yes  
checking for C compiler default output file name... a.exe  
checking for suffix of executables... .exe  
checking whether we are cross compiling... no  
checking for suffix of object files... o  
checking whether we are using the GNU C compiler... yes  
checking whether gcc accepts -g... yes  
checking for gcc option to accept ISO C89... none needed  
checking for style of include used by make... GNU  
checking dependency style of gcc... gcc3  
checking whether NLS is requested... yes  
checking for msgfmt... /usr/bin/msgfmt  
checking for gmsgfmt... /usr/bin/msgfmt  
checking for xgettext... /usr/bin/xgettext  
checking for msgmerge... /usr/bin/msgmerge  
checking for ld used by GCC... /usr/i686-pc-cygwin/bin/ld.exe  
checking if the linker (/usr/i686-pc-cygwin/bin/ld.exe) is GNU ld... yes  
checking for shared library run path origin... done  
checking how to run the C preprocessor... gcc -E  
checking for grep that handles long lines and -e... /usr/bin/grep  
checking for egrep... /usr/bin/grep -E  
checking for CFPreferencesCopyAppValue... no  
checking for CFLocaleCopyCurrent... no  
checking for GNU gettext in libc... no  
checking for iconv... yes  
checking for working iconv... yes  
checking how to link with libiconv... -liconv  
checking for GNU gettext in libintl... yes  
checking whether to use NLS... yes  
checking where the gettext function comes from... external libintl  
checking how to link with libintl... -lintl  
checking for ANSI C header files... yes  
checking for sys/types.h... yes  
checking for sys/stat.h... yes  
checking for stdlib.h... yes  
checking for string.h... yes  
checking for memory.h... yes  
checking for strings.h... yes  
checking for inttypes.h... yes  
checking for stdint.h... yes  
checking for unistd.h... yes  
checking for stdlib.h... (cached) yes  
checking for string.h... (cached) yes  
checking for error_at_line... yes  
checking for memset... yes  
checking for strstr... yes  
configure: creating ./config.status  
config.status: creating Makefile  
config.status: creating dok/Makefile  
config.status: creating iloj/Makefile  
config.status: creating kod/Makefile  
config.status: creating enc2ly.spec  
config.status: creating enc2ly.lsm  
config.status: creating po/Makefile.in  
config.status: creating config.h  
config.status: executing depfiles commands  
config.status: executing po-directories commands  
config.status: creating po/POTFILES  
config.status: creating po/Makefile  

入力するmakeと失敗します。問題はここにあると思います:

checking for CFPreferencesCopyAppValue... no  
checking for CFLocaleCopyCurrent... no  
checking for GNU gettext in libc... no  

では、どのパッケージが欠落していますか?それとも別のことですか?とにかくありがとう。

- - - - - - - - - - - 編集 - - - - - - - - - - - - -

私が使用./configure --disable-nlsし、それは動作します。したがって、問題は実際にはgettextです。

checking for GNU gettext in libc... no  

私はすでにgettextパッケージをインストールしました。何か足りない?プログラムの主言語はエスペラントなので、これを修正する必要があります。

4

1 に答える 1

3

私はこれでしばらく(おそらく多すぎる)遊んでいました、そして私はそれを構築することに成功しました。

Ubuntu 12.04では、GNU gettextを見つけて使用することで、問題なくファイルをビルドできます。 .tar.gzCygwinでは、あなたと同じエラーが発生します。

1つの違いは、Cygwinでは、を使用するプログラムを;gettextとリンクする必要があることです。-lintlUbuntuではそうではありません(明らかgettextに標準Cライブラリにあります)。

スクリプトをいじった後configure、次の回避策を思いつきました。

まず、を呼び出す前に環境変数$LIBSをに設定します。"-lintl"./configure

次に、CygwinライブラリではなくUbuntuライブラリが文書化されていないシンボルを提供しているよう_nl_domain_bindingsであり、によって生成される小さなテストプログラムはconfigureそのシンボルに依存しています。そこで、スクリプトをハッキングして、生成されたCテストプログラム内のへのconfigure参照をコメントアウトしました。_nl_domain_bindings

ハッキングconfigureはこの問題を解決する正しい方法ではありません。スクリプトはconfigure(ソースがリリースされる前に)他のツールによって生成されます。より良い解決策を考え出すには、GNUautoconfに精通した誰かが必要です。そして、それ自体でオプションの必要性を検出できるconfigure はずです。-lintl

そして、ここに本当に奇妙なことがあります:-lintlソースツリーでの唯一の出現は、次の行ですenc2ly-0.2/m4/gettext.m4

    LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'`

の出現を削除することで変更$LIBSしています。これを説明する解説がある場合、それはおそらくエスペラントにあります。(冗談を除いて、私がそれを言うとは思わなかった。)-lintl

だから私はその行をコメントアウトしました、そしてそれはうまくenc2ly.exeいきました、私が引数なしでそれを呼び出すならば少なくとも使用法メッセージを印刷するファイルを生成しました:

$ /usr/local/apps/enc2ly-0.2/bin/enc2ly.exe 
Dosieroj sukcese procezitaj: 0 (domaĝe!)
$ 

はい、それはエスペラントです。グーグル翻訳はそれを完全に成功したわけではないが、

Files successfully procezitaj: 0 (domaĝe!)

私は自分の変更をローカルのGitリポジトリに醜いハックを残しました。これがの出力ですgit diff

diff --git a/configure b/configure
index 1605a50..8d1a1b7 100755
--- a/configure
+++ b/configure
@@ -5162,12 +5162,12 @@ else
 #include <libintl.h>
 $gt_revision_test_code
 extern int _nl_msg_cat_cntr;
-extern int *_nl_domain_bindings;
+/* extern int *_nl_domain_bindings; */
 int
 main ()
 {
 bindtextdomain ("", "");
-return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr /* + *_nl_domain_bindings */
   ;
   return 0;
 }
diff --git a/m4/gettext.m4 b/m4/gettext.m4
index f84e6a5..6c77c3a 100644
--- a/m4/gettext.m4
+++ b/m4/gettext.m4
@@ -247,7 +247,7 @@ return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_a
         USE_INCLUDED_LIBINTL=yes
         LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV $LIBTHREAD"
         LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV $LTLIBTHREAD"
-        LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'`
+#       LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'`
       fi

       CATOBJEXT=

取得して解凍enc2ly-0.2.tar.gzし、上記の変更を適用し(手動で行うのは簡単です)、環境変数$LIBSをに設定し-lintl、通常どおりにビルドしてインストールします。これで準備完了です。

また、この問題についてメンテナに連絡することをお勧めします。彼らはこれよりもクリーンなソリューションを実装したいと思っていると確信しています。

于 2012-08-07T05:01:51.220 に答える