Ошибки компиляции RcppArmadillo на OS X Mavericks

Это продолжение вопроса по умножению матриц по элементам в Rcpp

После обновления до Mavericks я получал множество различных ошибок с RcppArmadillo. У меня установлен Xcode 5.0.2 и инструменты командной строки. Также, гфортран из Homebrew. Но я продолжаю сталкиваться с ошибкой ниже -

> cppFunction("arma::mat schur(arma::mat& a, arma::mat& b) 
                       { return(a % b); }", depends="RcppArmadillo")


ld: library not found for -lgfortran
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [sourceCpp_18474.so] Error 1
clang++  -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG  -I/usr/local/include  -    I"/Library/Frameworks/R.framework/Versions/3.0/Resources/library/Rcpp/include" -I"/Library/Frameworks/R.framework/Versions/3.0/Resources/library/RcppArmadillo/include"    -fPIC  "-mtune=native -g -O2 -Wall -pedantic -Wconversion" -c fileaf992bfb8f84.cpp -o fileaf992bfb8f84.o clang++ -dynamiclib -Wl,-headerpad_max_install_names -undefined dynamic_lookup -single_module -multiply_defined suppress -L/usr/local/lib -L/usr/local/lib -o sourceCpp_18474.so fileaf992bfb8f84.o -L/Library/Frameworks/R.framework/Resources/lib -lRlapack -L/Library/Frameworks/R.framework/Resources/lib -lRblas -lgfortran /Library/Frameworks/R.framework/Versions/3.0/Resources/library/Rcpp/lib/libRcpp.a -F/Library/Frameworks/R.framework/.. -framework R -Wl,-framework -Wl,CoreFoundation 
Error in sourceCpp(code = code, env = env, rebuild = rebuild, showOutput = showOutput,  : 
Error 1 occurred building shared library.

WARNING: The tools required to build C++ code for R were not found.

Please install Command Line Tools for XCode (or equivalent).

# Contents of Makevars
$ cat ~/.R/Makevars 
CC=clang
CXX=clang++ 
CXXFLAGS="-mtune=native -g -O2 -Wall -pedantic -Wconversion"
FLIBS=-lgfortran

Комментирование FLIBS=-lgfortran не помогает и приводит к еще большему количеству сообщений об ошибках -

> cppFunction("arma::mat schur(arma::mat& a, arma::mat& b) { return(a % b); }", depends="RcppArmadillo")
ld: warning: directory not found for option '-L/usr/local/lib/gcc/i686-apple-darwin8/4.2.3/x86_64'
ld: warning: directory not found for option '-L/usr/local/lib/x86_64'
ld: warning: directory not found for option '-L/usr/local/lib/gcc/i686-apple-darwin8/4.2.3'
ld: library not found for -lgfortran
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [sourceCpp_50381.so] Error 1

Заранее спасибо.

Обновить

Следуя предложениям Кевина и Дирка, приведенным ниже, я переустановил Rcpp, RcppArmadillo и inline из исходного кода и обновил FLIBS, чтобы они указывали на фактический каталог. Это решило проблему.

# Update FLIBS in ~/.R/Makevars
FLIBS=-L/usr/local/Cellar/gfortran/4.8.2/gfortran
#Re-Install from source
install.packages(c("Rcpp","RcppArmadillo","inline"),type="source")
#Restart R

2 ответа

Решение

РЕДАКТИРОВАТЬ: Если вы пользователь Homebrew, вам теперь нужно использовать brew install gcc (gfortran больше не предоставляется отдельно от gcc), а затем вы можете следовать инструкциям здесь, чтобы настроить.


Вы должны символическую ссылку на библиотеки /usr/local/lib вручную:

ln -s /usr/local/Cellar/gfortran/4.8.2/gfortran/lib/libgfortran.* /usr/local/lib/

я думал brew link gfortran бы справиться с этим, но, видимо, это только символические ссылки gfortran программа, а не фактические библиотеки. Так что, к сожалению, вы должны сделать это сами.

(Заменить 4.8.2 с какой версией gfortran вы используете из homebrew.)


В качестве альтернативы, если вы хотите избежать изменения /usr/local/lib, ты можешь использовать

FLIBS=-L/usr/local/Cellar/gfortran/4.8.2/gfortran

в вашем ~/.R/Makevars вместо файла, так что R знает, где найти gfortran библиотеки.

Я могу только предложить вам изучить многочисленные темы в списке r-sig-mac, различные ответы здесь в SO, а также посты в списке rcpp-devel.

Поскольку ваша ошибка происходит из-за неудачной ссылки на Фортран, возможно, также просмотрите стандартную страницу Simon U., а также страницу инструментов, на которую она указывает. AFAIK, вы должны использовать (более старый) gfortran 4.2.* С этой страницы вместе с R - но тогда я не пользователь OS X.

Редактирование в конце 2016 года: теперь у нас есть более подробные инструкции в разделе 2.16 Rcpp FAQ.

Другие вопросы по тегам