试图从源代码安装git,它会继续引发错误:
make install
* new build flags or prefix
CC credential-store.o
In file included from credential-store.c:1:
In file included from ./cache.h:8:
./gettext.h:17:11: fatal error: 'libintl.h' file not found
# include <libintl.h>
^
1 error generated.
make: *** [credential-store.o] Error 1
在lib.intl.h上没有任何谷歌搜索结果。什么是这个难以捉摸的库,我怎样才能得到它以便我最终可以安装git?
根据系统的不同,它可能是GNU C库(glibc)的一部分。
请注意,只安装文件libintl.h
对您没有任何帮助。
在基于Debian的系统(包括Debian,Ubuntu和Linux Mint)上,它是libc6-dev
包的一部分,安装有:
sudo apt-get install libc6-dev
由于您使用的是Mac OS X,因此Google搜索“libintl.h OSX”会显示许多人遇到类似问题。根据Git资料中的INSTALL
文件:
设置
NO_GETTEXT
以禁用本地化支持并使Git仅使用英语。在autoconf
下,configure
脚本会自动执行此操作,如果它在系统上找不到libintl
。
如果您正在尝试编译AssaultCube并且收到此错误(应该抱怨缺少“INTL / libintl.h”),则必须从AssaultCube应用程序内容中获取INTL.framework并将其放入/ Library / Frameworks中。 MacPorts,HomeBrew等没有包可以修复它。非常讨厌有多少开源项目无法编译。
什么是这个难以捉摸的库,我怎样才能得到它以便我最终可以安装git?
来自GNU manual:
11.21 libintl.h
Libintl是一个为程序提供本地语言支持的库。
定义宏
__USE_GNU_GETTEXT
,__GNU_GETTEXT_SUPPORTED_REVISION
,并声明函数gettext
,dgettext
,dcgettext
,ngettext
,dngettext
,dcngettext
,textdomain
,bindtextdomain
,bind_textdomain_codeset
。文档:
- http://www.gnu.org/software/libc/manual/html_node/Message-catalogs-with-gettext.html,
- http://www.gnu.org/software/gettext/manual/html_node/gettext.html。
Gnulib模块:gettext
如果安装了GNU gettext,Gnulib修复了可移植性问题:
某些平台上缺少此头文件:Mac OS X 10.5,FreeBSD 6.0,OpenBSD 3.8,Minix 3.1.8,AIX 5.1,HP-UX 11,IRIX 6.5,OSF / 1 5.1,mingw,MSVC 9,Interix 3.5,BeOS 。
在某些非glibc平台上,这些函数无法处理具有系统相关字符串(主要版本1或次要版本1)的GNU .mo文件:NetBSD 3.0,Solaris 10。
你可以从Gnulib获得libintl.h
,这是The GNU Portability Library。它可以从GNU的Savannah下载。
Gnulib web page还指出:
Gnulib没有发布。它旨在用于源级别。
您可以在Savannah上浏览当前的gnulib源。
要使用Gnulib,您可以使用以下shell命令通过匿名Git检索其源代码及其历史记录:
git clone git://git.savannah.gnu.org/gnulib.git
开发人员还可以通过非匿名Git检索源代码,以便进行提交;有关详细信息,请参阅Gnulib的顶级README文件。
获得源代码后,运行./gnulib-tool --help。有关帮助和更多信息,请参阅下面的文档和其他资源。
在使用El Capitan和自制软件的OSX上的FWIW,我做了一个:
1)我不确定El Capitan升级是否破坏了某些东西,所以首先我确定我有最新的gettext:
$ brew reinstall gettext
然后我不得不通过这样做重新链接:
$ brew unlink gettext && brew link gettext --force
在那之后,其他工具能够找到它,生活恢复正常。
我学会了libintl来自libgettext。如果你已经通过Homebrew安装了gettext,你会看到:
$ locate libintl
/usr/local/Cellar/gettext/0.18.3.2/lib/libintl.8.dylib
/usr/local/Cellar/gettext/0.18.3.2/lib/libintl.a
/usr/local/Cellar/gettext/0.18.3.2/lib/libintl.dylib
<..snip..>
以下是关于“找不到-lintl的库”问题的以下工作
ln -s /usr/local/Cellar/gettext/0.18.3.2/lib/libintl.* /usr/local/lib/
当包正在寻找此文件时,安装或构建GNU gettext包。这个包装“安装”${prefix}/include/libintl.h
等等
如果你能找到合适的Libtools版本(来自http://ftp.gnu.org/gnu/libtool/)你可能会在包中找到它。
否则,您可以使用以下配置来删除此依赖项:
./configure --disable-nls
为了在OSX Lion上安装最新版本的git,这就是我所做的:
*请注意,如果您还没有安装git,可以从网站下载并将其解压缩到~/src/git
我还建议你做一个whereis git
,看看你是否已经安装了它,这样你才知道要设置什么前缀。我是/usr/bin/git
,所以我将前缀设置为/usr
mkdir ~/src
git clone https://github.com/git/git.git
cd git
make configure
./configure --prefix=/usr
make
make install
通过这种方式,我不必下载任何额外的库或在论坛上寻找答案。感谢automake,我知道git是为我的系统设置的,并且运行没有任何打嗝。
这看起来很有希望 - http://code.google.com/p/rudix/downloads/detail?name=static-libintl-0.18.1.1-5.pkg&can=2&q= - 似乎含有libintl作为pkg。它为我解决了对libintl的依赖。
如果您不关心本地化并且只使用英语,请在NO_GETTEXT
中定义Makefile
来自Makefile
:
如果您不希望翻译Git输出,请定义NO_GETTEXT。翻译的Git需要GNU libintl或其他gettext实现,以及运行时的libintl-perl。
在终端上安装macport并输入
sudo port install libcxx