Ошибка связи с установкой библиотеки Rcpp "не найдена для -lintl"

Я просто наткнулся на ошибку компоновщика при попытке установить некоторые R-пакеты с Rcpp в качестве зависимости. Моя настройка - Mac OS X 10.9.1 (Mavericks), R 3.0.2, установленная Homebrew. Здесь вывод ошибки:

> 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)

Ответ 1

По-видимому, libintl является частью пакета gettext. Я сделал следующее, возможно, переустановить, чтобы убедиться, что моя копия обновлена:

$ 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 не символизирует библиотеку, что может объяснить, почему install.packages не может найти Это. Что трюк добавлял путь библиотеки в ~/.R/Makevars так:

PKG_LIBS=-L/usr/local/Cellar/gettext/0.18.3.2/lib

Ответ 2

Этот ответ должен изменить ответ Giupo, поскольку он содержит опечатку, но я считаю, что это достаточно важно, чтобы быть более заметным, чем комментарий. Это очень эффективный способ установки пакета Rserve из Homebrew без возникновения более сложных проблем в OSX:

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

Чтобы уменьшить загрязнение пространства имен, еще больше можно обернуть локальным:

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

Ответ 3

Я хочу добавить свои 2 цента к квесту, предложив менее навязчивый (то есть: нет никаких изменений в файлах /env для пользователя, что приведет к нежелательным побочным эффектам в будущем)

LDFLAGS и CPPFLAGS, переустановив gettext, как это сделал @cbare, и передайте их в install.packages (внутри R) с параметром configure.args:

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

Это должно Rserve (у меня это сработало, когда я боролся с той же проблемой при установке Rserve).

Ответ 4

Это работало нормально для меня:

brew link gettext --force