安装Rcpp时出现链接错误“;找不到用于-lintl”的库;

安装Rcpp时出现链接错误“;找不到用于-lintl”的库;,r,homebrew,osx-mavericks,rcpp,R,Homebrew,Osx Mavericks,Rcpp,我只是在尝试安装一些作为依赖项的链接器软件包时遇到了一个链接器错误。我的设置是MacOSX10.9.1(Mavericks),R3.0.2由自制软件安装。以下是错误输出: > install.packages('Rcpp') trying URL 'http://cran.fhcrc.org/src/contrib/Rcpp_0.10.6.tar.gz' Content type 'application/x-gzip' length 1985569 bytes (1.9 Mb) open

我只是在尝试安装一些作为依赖项的链接器软件包时遇到了一个链接器错误。我的设置是MacOSX10.9.1(Mavericks),R3.0.2由自制软件安装。以下是错误输出:

> install.packages('Rcpp')
trying URL 'http://cran.fhcrc.org/src/contrib/Rcpp_0.10.6.tar.gz'
Content type 'application/x-gzip' length 1985569 bytes (1.9 Mb)
opened URL
==================================================
downloaded 1.9 Mb

* installing *source* package ‘Rcpp’ ...
** package ‘Rcpp’ successfully unpacked and MD5 sums checked
** libs
clang++ -I/usr/local/Cellar/r/3.0.2/R.framework/Resources/include -DNDEBUG -I../inst/include/ -I/usr/local/include    -fPIC  -g -O2  -c Date.cpp -o Date.o
clang++ -I/usr/local/Cellar/r/3.0.2/R.framework/Resources/include -DNDEBUG -I../inst/include/ -I/usr/local/include    -fPIC  -g -O2  -c Module.cpp -o Module.o
clang -I/usr/local/Cellar/r/3.0.2/R.framework/Resources/include -DNDEBUG -I../inst/include/ -I/usr/local/include    -fPIC   -c Rcpp_init.c -o Rcpp_init.o
clang++ -I/usr/local/Cellar/r/3.0.2/R.framework/Resources/include -DNDEBUG -I../inst/include/ -I/usr/local/include    -fPIC  -g -O2  -c Timer.cpp -o Timer.o
clang++ -I/usr/local/Cellar/r/3.0.2/R.framework/Resources/include -DNDEBUG -I../inst/include/ -I/usr/local/include    -fPIC  -g -O2  -c api.cpp -o api.o
clang++ -I/usr/local/Cellar/r/3.0.2/R.framework/Resources/include -DNDEBUG -I../inst/include/ -I/usr/local/include    -fPIC  -g -O2  -c attributes.cpp -o attributes.o
clang++ -I/usr/local/Cellar/r/3.0.2/R.framework/Resources/include -DNDEBUG -I../inst/include/ -I/usr/local/include    -fPIC  -g -O2  -c barrier.cpp -o barrier.o
clang++ -I/usr/local/Cellar/r/3.0.2/R.framework/Resources/include -DNDEBUG -I../inst/include/ -I/usr/local/include    -fPIC  -g -O2  -c exceptions.cpp -o exceptions.o
clang++ -dynamiclib -Wl,-headerpad_max_install_names -undefined dynamic_lookup -single_module -multiply_defined suppress -L/usr/local/lib -o Rcpp.so Date.o Module.o Rcpp_init.o Timer.o api.o attributes.o barrier.o exceptions.o -F/usr/local/Cellar/r/3.0.2/R.framework/.. -framework R -lintl -Wl,-framework -Wl,CoreFoundation
ld: library not found for -lintl
clang: error: linker command failed with exit code 1 (use -v to see invocation)

显然,libintl是这个方案的一部分。我执行了以下可能是冗余的重新安装,以确保我的副本是最新的:

$ brew install gettext
Warning: gettext-0.18.3.2 already installed
$ brew reinstall gettext
==> Reinstalling gettext 
==> Downloading http://ftpmirror.gnu.org/gettext/gettext-0.18.3.2.tar.gz
Already downloaded: /Library/Caches/Homebrew/gettext-0.18.3.2.tar.gz
==> ./configure --prefix=/usr/local/Cellar/gettext/0.18.3.2 --with-included-gettext --with-included-glib --with-included-libcroco --with-included-libunistring --with-emac
==> make
==> make install
==> Caveats
This formula is keg-only, so it was not symlinked into /usr/local.

OS X provides the BSD gettext library and some software gets confused if both are in the library path.

Generally there are no consequences of this for you. If you build your
own software and it requires this formula, you'll need to add to your
build variables:

    LDFLAGS:  -L/usr/local/opt/gettext/lib
    CPPFLAGS: -I/usr/local/opt/gettext/include
在上面的输出中,它表示brew没有对库进行符号链接,这可能解释了为什么找不到它。诀窍是将库路径添加到中,例如:


我想通过建议一个不太具侵入性的(意思是:用户在未来不会对文件/环境进行任何更改,从而带来不必要的副作用)来为任务增加2美分

通过像@cbare那样重新安装gettext,注意
LDFLAGS
CPPFLAGS
,并使用
configure.args
参数将它们传递给
install.packages
(在R内部):

flags="LDFLAGS=-L/usr/local/opt/gettext/lib CPPFLAGS=-I/usr/local/opt/gettext/include"
install.packages('Rcpp', configure.args=flags)

这应该可以做到(我在安装
Rserve
时遇到了同样的问题,这对我来说很有效)。

这个答案是为了修改Giupo的答案,因为它包含了一个打字错误,但我相信它比一条评论更重要。该解决方案是从自制软件安装Rserve软件包的一种非常有效的方法,不会在OSX上造成更广泛的问题:

    flags="CPPFLAGS=-I/usr/local/opt/gettext/lib LDFLAGS=-L/usr/local/opt/gettext/include"
    install.packages('Rserve', configure.args=flags)
为了减少名称空间污染,您可以使用本地

    local({
           flags="CPPFLAGS=-I/usr/local/opt/gettext/lib LDFLAGS=-L/usr/local/opt/gettext/include"
           install.packages('Rserve', configure.args=flags)})

这对我来说很好:

brew link gettext --force

我觉得这有点不寻常。您是从源代码构建R,还是使用Simon的二进制文件?官方说法是不支持。如果你走了那条路,事情就破裂了,你就要保留这两部分。也许可以尝试从cran重新安装的二进制文件。安装进行得很顺利。再次感谢。我不明白为什么人们在OSX上安装自制的R。如果需要的话,我们甚至每天都有devel版本的二进制版本。如果你使用它,事情就会成功。linux的每日版本在哪里?为什么有些linux用户希望从apt get安装R?同样的原因。希望任何想使用自制软件的人都能看到这个解决方案,因为它可以正常工作,而且副作用很小。我不明白,brew显示了
LDFLAGS:-L/usr/local/opt/gettext/lib CPPFLAGS:-I/usr/local/opt/gettext/include
,但你似乎把它们互换了?@rien333你说得对!抱歉修好晚了!我试着编辑之前的问题,但奇怪的是编辑被拒绝了。如果我真的拒绝了编辑,那不是我的本意!谢谢你指出错误。
brew link gettext --force