我正在尝试在 macOS 上编译一个需要 gettext (用于 intltools)的程序。我尝试了以下命令来运行配置脚本:
LDFLAGS=-L/usr/local/opt/gettext/lib CPPFLAGS=-I/usr/local/opt/gettext/include ./configure
LDFLAGS=/usr/local/opt/gettext/lib CPPFLAGS=/usr/local/opt/gettext/include ./configure
在第一种情况下,它失败并显示以下错误消息
configure: error: GNU gettext tools not found; required for intltool
在后一种情况下,它找不到 C 编译器
解决此类问题的正确方法是什么?我明白这可能与这
答案1
该configure
脚本失败,因为它无法gettext
在当前$PATH
.这些工具包括xgettext
、msgfmt
和其他二进制文件。
在装有 Homebrew 的 macOS 上,gettext
Homebrew 包实际上会安装这些二进制文件,但它们位于/usr/local/Cellar/gettext/0.18.1.1/bin
目录中而不是直接位于/usr/local/bin
.
这样做的原因是Homebrew 将所有“keggs”安装在“地窖”中,并且gettext
是一个“小桶”包。
如果一切按预期工作,您的gettext
工具应该已经从目录符号链接Cellar
到/usr/local/bin
,并且如果您的 Homebrew 设置正确,则/usr/local/bin
应该位于您的$PATH
.
显然,这是不是设置正确,所以我建议确保您之前$PATH
的设置正确,并且工具的链接存在于地窖到目录中。解决其中一个或两个问题将为您解决此问题。/usr/local/bin
/usr/bin
gettext
/usr/local/bin
更新:根据这个超级用户的回答gettext
,默认情况下可能无法正确设置工具的符号链接。以下命令将修复它:
$ brew link gettext --force
一旦您编译了其他应用程序,您可以使用以下命令撤消上述操作
$ brew unlink gettext
... 如果你希望。
StackOverflow 上的另一个答案继续解释“仅桶”(gettext
是其中之一)的 Homebrew 软件包的可执行文件是不是从“地窖”链接到/usr/local/bin
。这是设计使然。这解释了为什么brew link
需要执行此步骤才能使configure
脚本正常工作。
默认情况下不会将“仅桶”二进制文件放入您的原因$PATH
是它们可能会干扰 macOS 基本系统中已存在的类似命名的工具。