2012-08-03 131 views
1

我想使用cygwin在Windows上编译enc2ly(http://enc2ly.sourceforge.net/en/),但它会给出错误。当我键入./configure,结果如下:在Windows上编译:为什么cygwin无法识别gettext?

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包。有什么遗漏?我必须解决这个问题,因为程序的主要语言是世界语!

回答

2

我花了一些时间(可能太多)玩这个,我已经设法让它建立。

在Ubuntu 12.04上,它构建出 .tar.gz文件没有问题,查找和使用GNU gettext。在Cygwin上,我会遇到同样的错误。

一个区别是,在Cygwin上,使用gettext的程序需要链接到-lintl;在Ubuntu上,它不会(显然gettext在标准C库中)。

经过一番与configure脚本乱搞,我想出了以下解决方法:

首先,调用./configure前的环境变量$LIBS设置为"-lintl"。其次,看起来Ubuntu库,但不是Cygwin库,提供了一个未公开的符号_nl_domain_bindings,由configure生成的小测试程序依赖于该符号。所以我砍了configure脚本,在生成的C测试程序中注释了对_nl_domain_bindings的引用。

黑客configure不是解决此问题的正确方法;其他工具会生成configure脚本(释放源之前)。您需要熟悉GNU autoconf的人才能提出更好的解决方案。并且configure应该能够自己检测需要-lintl选项。

而且这里的东西真的很奇怪:的-lintl源树只发生在​​以下行:

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,建立和正常安装,并且你应该是好走。

你可能想联系维护人员解决这个问题;我确定他们想要实施比这更清洁的解决方案。

+0

问题是,事情仍然是在世界语(我不知道你是否注意到我的问题编辑)。但至少它是有效的,语言并不是真正的障碍,因为这是一个简单的程序,谷歌翻译就在那里。如你所说,我(我们)在这方面花费了太多时间。也许我会尝试使用minGW来构建它,或者请求我的一些朋友在Linux上进行交叉编译。无论如何,感谢您的时间和精力。 – TiagoPC 2012-08-08 15:28:54

相关问题