【问题标题】:What is libintl.h and where can I get it?什么是 libintl.h,我在哪里可以得到它?
【发布时间】:2012-07-07 09:54:56
【问题描述】:

尝试从源代码进行 git 的 make 安装,但它不断出现错误:

 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?

【问题讨论】:

  • @SeeBeen:拥有libintl.h 头文件的副本是没有用的;你需要它的库。
  • @Keith Thompson 我认为所有必要的文件都在该文件夹中。我的一个朋友也有同样的问题。最近。他在 ubuntu 上:/
  • @SeeBeenq:不太可能。 libintl.h 有几个函数声明;如果没有这些功能的实际实现,单独的标题是无用的。获取头文件和库的方法是安装提供它的任何包。
  • 国际化。

标签: git osx-lion


【解决方案1】:

根据系统的不同,它可能是 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,它将自动执行此操作。

【讨论】:

  • 有趣的是,当我搜索 osx libintl.h 这是我得到的第一个结果。
  • 如果你使用的是 OS X,你可以像这样调用make 来设置NO_GETTEXT:NO_GETTEXT=1 make。我认为 Bash 中所有带有环境变量的命令都是如此,对吧?
  • @Cupcake:是的,但是configure 脚本应该会自动执行此操作,因此您无需担心。
  • 所以我花了一段时间才弄清楚的一件事是,您必须首先运行 make configure 来生成 ./configure 脚本。它被.gitignore 忽略,但仍将由Makefile 生成。
  • @KeithThompson ;我正在使用给定 libc 不存在 libintl 的系统。你知道可以单独提供的第三方库吗?
【解决方案2】:

如果您能找到正确版本的 Libtools(来自 http://ftp.gnu.org/gnu/libtool/),您可能会在包中找到它。

否则你可以使用下面的配置来移除这个依赖:

./configure --disable-nls

【讨论】:

  • 在尝试安装 postgis 时,禁用 NLS 是唯一适用于我在 OSX 和 Mojave 上的解决方案。
  • 谢谢,这是在 Mac OS X Catalina 上适用于 e 的唯一方法!
【解决方案3】:

这看起来很有希望 - http://code.google.com/p/rudix/downloads/detail?name=static-libintl-0.18.1.1-5.pkg&can=2&q= - 似乎包含 libintl 作为 pkg。它为我解决了对 libintl 的依赖。

【讨论】:

    【解决方案4】:

    当包在寻找这个文件时,安装或构建 GNU gettext 包。此软件包“安装”${prefix}/include/libintl.h

    【讨论】:

    • 可能有帮助,因为 OP 在 OS X 上,但没有指定他是否使用 Homebrew:尽管安装了 gettext,但我看到一些构建无法找到 libintl -- 我不得不brew link gettext解决它。
    • 在我的 Mac 上尝试编译 Phalcon PHP 时,上述 brew link gettext 提示对我有用。感谢您的提示!
    • 根据GNU coding standards${prefix}/include/libintl.h就是${includedir}/libintl.h
    【解决方案5】:

    如果您不关心本地化并且只接受英语,请在 Makefile 中定义 NO_GETTEXT

    来自Makefile

    如果您不想翻译 Git 输出,请定义 NO_GETTEXT。 翻译后的 Git 需要 GNU libintl 或其他 gettext 实现, 在运行时加上 libintl-perl。

    【讨论】:

    • 如果你使用的是 OS X,你可以像这样调用make 来设置NO_GETTEXT:NO_GETTEXT=1 make。我认为 Bash 中所有带有环境变量的命令都是如此,对吧?
    • 制作前缀=/usr NO_GETTEXT=1; sudo make prefix=/usr install NO_GETTEXT=1
    【解决方案6】:

    为了在 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 是为我的系统设置的,并且运行起来不会有任何问题。

    【讨论】:

    • 配置可能找不到标题并自动跳过它。您可能需要 autconf 来生成配置脚本。我收到以下错误消息: make configure GEN configure /bin/sh: autoconf: command not found make: *** [configure] Error 127
    【解决方案7】:

    我了解到 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/
    

    【讨论】:

    • 谢谢,这解决了我遇到的“ld: library not found for -lintl”错误!
    • 我仍然收到gcc -g -O2 -DCHROMA_CURSES_HEADER=\&lt;ncurses.h\&gt; -DCHROMA_DATA_DIR=\"/usr/local/share/chroma/\" -c -o main.o main.c main.c:33:10: fatal error: 'libintl.h' file not found。我如何确定 gcc 正在寻找文件的正确位置?
    • 这实际上回答了 OP 的问题。
    【解决方案8】:

    安装macport并在终端输入

    sudo port install libcxx
    

    【讨论】:

      【解决方案9】:

      如果您尝试编译 AssaultCube 并遇到此错误(应该抱怨“INTL/libintl.h”丢失),您必须从 AssaultCube 应用程序内容中获取 INTL.framework 并将其放入 /Library/构架。 MacPorts、HomeBrew 等的任何软件包都无法修复它。很多开源项目编译失败,非常非常恼火。

      【讨论】:

        【解决方案10】:

        在 OSX 上使用 El Capitan 和自制软件进行 FWIW,我做了一个:

        1) 我不确定 El Capitan 升级是否破坏了某些东西,所以首先我确保我拥有最新的 gettext:

        $ brew reinstall gettext
        

        然后我不得不重新链接:

        $ brew unlink gettext && brew link gettext --force
        

        之后,其他工具都能找到它,生活又恢复了正常。

        【讨论】:

        • 更好的是让 brew 为您处理链接细节:​​brew unlink gettext &amp;&amp; brew link gettext --force
        • 这个答案对我有很大帮助
        • 这对我不起作用。通过 brew 重新安装 gettext 带有警告“此公式仅用于小桶,这意味着它没有符号链接到 /usr/local”。既不是按照您的建议手动链接,也不是按照@MarkusAmaltheaMagnuson 的建议进行 brew 链接可以让 git 编译。仍然有错误“gettext.h:17:11: fatal error: 'libintl.h' file not found”。 :(
        • 有趣 - 所以我猜它实际上是一个不同的库,但由于 gettext(以及我正在尝试构建的依赖于 gettext 的项目)使用它,这是一种可行的方法。
        【解决方案11】:

        这个难以捉摸的库是什么,我怎样才能得到它以便最终安装 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.

        文档:

        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。

        这些函数不能处理依赖于系统的 GNU .mo 文件 某些非 glibc 上的字符串(主要版本 1 或次要版本 1) 平台:NetBSD 3.0、Solaris 10。

        你可以从 Gnulib 获得libintl.h,即The GNU Portability Library。它可以从 GNU 的 Savannah 下载。

        Gnulib web page 还声明:

        Gnulib 不发布。它旨在在源头使用 级别。

        您可以在 Savannah 上浏览当前的 gnulib 源代码。

        要使用 Gnulib,您可以通过以下方式检索其源代码及其历史记录 匿名 Git,使用以下 shell 命令:

        git clone git://git.savannah.gnu.org/gnulib.git
        

        开发人员还可以通过非匿名 Git 检索源代码, 出于提交的目的;有关详细信息,请参阅 Gnulib 的 顶级 README 文件。

        获得源代码后,运行 ./gnulib-tool --help。寻求帮助和 更多信息,请参阅下面的文档和其他资源。

        【讨论】:

          【解决方案12】:

          以下内容对我有用:

          1. brew reinstall gettext
          2. brew unlink gettext &amp;&amp; brew link gettext --force
          3. 要让编译器找到 libpq,您可能需要设置:
          export LDFLAGS="-L/usr/local/opt/libpq/lib"
          export CPPFLAGS="-I/usr/local/opt/libpq/include"
          

          例如,在我的系统上安装 Postgis 时,我使用了带有以下标志的 ./configure

          ./configure CPPFLAGS="-I/usr/local/opt/libpq/include" LDFLAGS="-L/usr/local/opt/libpq/lib"
          

          【讨论】:

          • 欢迎来到 Stack Overflow。请尝试解释它的作用,以便它可以帮助其他人理解您的建议:)
          【解决方案13】:

          我全新安装了 OSX Catalina (10.15.7),只需确保完全更新和升级自制软件,就可以获得/usr/local/lib/libintl.*

          之前:

          user@mac:/usr/local/lib$ ls libintl*
          ls: libintl*: No such file or directory
          

          更新/升级自制软件:

          $ brew update
          

          ...只是为了确保我决定再次运行它

          $ brew update
          

          ...这告诉我我首先需要运行

          $ git -C /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core fetch --unshallow
          

          ...第三次是魅力?

          $ brew update
          

          ...告诉我应该跑

          $ brew upgrade
          

          然后,/usr/local/lib/libintl.* 被填充:

          user@mac:/usr/local/lib$ ls libintl*
          libintl.8.dylib libintl.a libintl.dylib
          

          我认为这可以满足您的需求!

          【讨论】:

            【解决方案14】:

            那些试图在 2021 年 5 月之前在 macOS 上构建 Git 并希望实现国际化的人,我发现这是最好的非破坏性解决方案:

            brew install gettext
            

            找到 libintl 头文件和库的位置:

            find /opt -name "libintl.*" -print
            /opt/homebrew/include/libintl.h
            /opt/homebrew/lib/libintl.dylib
            /opt/homebrew/lib/libintl.8.dylib
            /opt/homebrew/lib/libintl.a
            /opt/homebrew/Cellar/gettext/0.21/include/libintl.h
            /opt/homebrew/Cellar/gettext/0.21/lib/libintl.dylib
            /opt/homebrew/Cellar/gettext/0.21/lib/libintl.8.dylib
            /opt/homebrew/Cellar/gettext/0.21/lib/libintl.a
            

            记下 gettext 目录的位置。

            现在运行以下命令(如果您的 CFLAGS 和 LDFLAGS 已经设置,它可能会略有不同。只需确保 gettext 路径包含在已经存在的任何其他内容中):

            make configure
            ./configure "LDFLAGS=$LDFLAGS -L/opt/homebrew/Cellar/gettext/0.21/lib" \
                 "CFLAGS=-I/opt/homebrew/Cellar/gettext/0.21/include"
            

            正确配置后,您应该可以使用make 构建它。

            【讨论】:

            • 这对我有用,但自制软件似乎有不同的安装位置,所以我不得不运行 find /usr/local -name "libintl.*" -print 来查找库
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2020-09-28
            • 2017-01-08
            • 1970-01-01
            • 2015-09-02
            • 2020-03-30
            • 2019-10-17
            • 1970-01-01
            相关资源
            最近更新 更多