Установка пакетов R, требующих компиляции, в macOS не работает со времен Big Sur. Вот такой пример.
> install.packages('nlme')
There is a binary version available but the source version is later:
binary source needs_compilation
nlme 3.1-150 3.1-151 TRUE
Do you want to install from sources the package which needs compilation? (Yes/no/cancel) Yes
installing the source package ‘nlme’
trying URL 'https://cran.rstudio.com/src/contrib/nlme_3.1-151.tar.gz'
Content type 'application/x-gzip' length 805592 bytes (786 KB)
==================================================
downloaded 786 KB
* installing *source* package ‘nlme’ ...
** package ‘nlme’ successfully unpacked and MD5 sums checked
** using staged installation
** libs
"gfortran-4.8" -fno-optimize-sibling-calls -fPIC -Wall -g -O2 -c chol.f -o chol.o
gfortran-4.8: warning: couldn’t understand kern.osversion ‘20.1.0
clang -mmacosx-version-min=10.13 -I"/Library/Frameworks/R.framework/Resources/include" -DNDEBUG -I/usr/local/include -fPIC -Wall -g -O2 -c corStruct.c -o corStruct.o
clang -mmacosx-version-min=10.13 -I"/Library/Frameworks/R.framework/Resources/include" -DNDEBUG -I/usr/local/include -fPIC -Wall -g -O2 -c gnls.c -o gnls.o
clang -mmacosx-version-min=10.13 -I"/Library/Frameworks/R.framework/Resources/include" -DNDEBUG -I/usr/local/include -fPIC -Wall -g -O2 -c init.c -o init.o
clang -mmacosx-version-min=10.13 -I"/Library/Frameworks/R.framework/Resources/include" -DNDEBUG -I/usr/local/include -fPIC -Wall -g -O2 -c matrix.c -o matrix.o
clang -mmacosx-version-min=10.13 -I"/Library/Frameworks/R.framework/Resources/include" -DNDEBUG -I/usr/local/include -fPIC -Wall -g -O2 -c nlOptimizer.c -o nlOptimizer.o
clang -mmacosx-version-min=10.13 -I"/Library/Frameworks/R.framework/Resources/include" -DNDEBUG -I/usr/local/include -fPIC -Wall -g -O2 -c nlme.c -o nlme.o
clang -mmacosx-version-min=10.13 -I"/Library/Frameworks/R.framework/Resources/include" -DNDEBUG -I/usr/local/include -fPIC -Wall -g -O2 -c nlmefit.c -o nlmefit.o
clang -mmacosx-version-min=10.13 -I"/Library/Frameworks/R.framework/Resources/include" -DNDEBUG -I/usr/local/include -fPIC -Wall -g -O2 -c pdMat.c -o pdMat.o
clang -mmacosx-version-min=10.13 -I"/Library/Frameworks/R.framework/Resources/include" -DNDEBUG -I/usr/local/include -fPIC -Wall -g -O2 -c pythag.c -o pythag.o
"gfortran-4.8" -fno-optimize-sibling-calls -fPIC -Wall -g -O2 -c rs.f -o rs.o
gfortran-4.8: warning: couldn’t understand kern.osversion ‘20.1.0
clang -mmacosx-version-min=10.13 -dynamiclib -Wl,-headerpad_max_install_names -undefined dynamic_lookup -single_module -multiply_defined suppress -L/Library/Frameworks/R.framework/Resources/lib -L/usr/local/lib -o nlme.so chol.o corStruct.o gnls.o init.o matrix.o nlOptimizer.o nlme.o nlmefit.o pdMat.o pythag.o rs.o -F/Library/Frameworks/R.framework/.. -framework R -Wl,-framework -Wl,CoreFoundation
ld: framework not found CoreFoundation
clang-7: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [nlme.so] Error 1
ERROR: compilation failed for package ‘nlme’
* removing ‘/Library/Frameworks/R.framework/Versions/4.0/Resources/library/nlme’
* restoring previous ‘/Library/Frameworks/R.framework/Versions/4.0/Resources/library/nlme’
Warning in install.packages :
installation of package ‘nlme’ had non-zero exit status
The downloaded source packages are in
‘/private/var/folders/_3/b8whcf8d1bb8w_lr2rrscb5m0000gp/T/RtmpWCjwfs/downloaded_packages’
Я попытался переустановить xcode и инструменты командной строки и завершил обновление + обновление Brew. Любые предложения приветствуются.
Многие другие люди натыкаются на ту же проблему. pbs.twimg.com/media/EbLLgorUcAEpWYf?format=png&name=900x900
Спасибо @IRTFM. Хотя очень неприятный!
Возможно, лучше связаться со списком рассылки R-MAC-sig.
Я застрял с той же проблемой. Я пробовал r-macos-rtools
, но установка не работает для Big Sur. Вот некоторая информация о том, как исправить установку, хотя мне это не удалось: github.com/rmacoslib/r-macos-rtools/issues/42
Это было сложно, но вот шаги, которые я использовал для компиляции пакетов R из исходного кода в MacOS Big Sur:
(не верьте обновлению программного обеспечения, если оно говорит «обновлено» — он лжет — brew doctor
сказал, что моя версия на самом деле старая)
sudo rm -rf /Library/Developer/CommandLineTools
sudo xcode-select --install
# WARNING: This can take several hours
brew install gcc
brew install llvm
brew cleanup
brew update
brew upgrade
brew reinstall gcc
brew reinstall llvm
sudo ln -s /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/* /usr/local/include/
# I believe you can safely ignore warnings like this:
#ln: /usr/local/include//tcl.h: File exists
#ln: /usr/local/include//tclDecls.h: File exists
#ln: /usr/local/include//tclPlatDecls.h: File exists
#ln: /usr/local/include//tclTomMath.h: File exists
#ln: /usr/local/include//tclTomMathDecls.h: File exists
#ln: /usr/local/include//tk.h: File exists
#ln: /usr/local/include//tkDecls.h: File exists
#ln: /usr/local/include//tkPlatDecls.h: File exists
~/.R/Makevars
(если у вас нет файла с именем Makevars
в вашем каталоге ~/.R/
, создайте его) и включите только следующие строки:FLIBS=-L/usr/local/gfortran/lib/gcc/x86_64-apple-darwin19/10.2.0 -L/usr/local/gfortran/lib -lgfortran -lquadmath -lm
CXX1X=/usr/local/gfortran/bin/g++
CXX98=/usr/local/gfortran/bin/g++
CXX11=/usr/local/gfortran/bin/g++
CXX14=/usr/local/gfortran/bin/g++
CXX17=/usr/local/gfortran/bin/g++
LLVM_LOC = /usr/local/opt/llvm
CC=/usr/local/gfortran/bin/gcc -fopenmp
CXX=/usr/local/gfortran/bin/g++ -fopenmp
CFLAGS=-g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe
CXXFLAGS=-g -O3 -Wall -pedantic -std=c++11 -mtune=native -pipe
LDFLAGS=-L/usr/local/opt/gettext/lib -L$(LLVM_LOC)/lib -Wl,-rpath,$(LLVM_LOC)/lib
CPPFLAGS=-I/usr/local/opt/gettext/include -I$(LLVM_LOC)/include -I/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include
# Compile the nlme package from source
install.packages("nlme", type = "source")
# To check whether openmp is enabled, compile data.table:
install.packages("data.table", type = "source")
У меня возникла ошибка при обновлении "RcppAlgos" (не удалось найти gmp.h или libgmp). Я проверил, что gmp был установлен (brew install gmp
), затем добавил /usr/local/include в CPPFLAGS и /usr/local/lib в LDFLAGS в файле ~/.R/Makevars, чтобы решить проблему, т.е.
cat ~/.R/Makevars
LOC=/usr/local/gfortran
CC=$(LOC)/bin/gcc -fopenmp
CXX=$(LOC)/bin/g++ -fopenmp
CXX11 = $(LOC)/bin/g++ -fopenmp
CFLAGS=-g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe
CXXFLAGS=-g -O3 -Wall -pedantic -std=c++11 -mtune=native -pipe
LDFLAGS=-L$(LOC)/lib -Wl,-rpath,$(LOC)/lib,-L/usr/local/lib
CPPFLAGS=-I$(LOC)/include -I/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include -I/usr/local/include
FLIBS=-L/usr/local/gfortran/lib/gcc/x86_64-apple-darwin19/10.2.0 -L/usr/local/gfortran/lib -lgfortran -lquadmath -lm
CXX1X=/usr/local/gfortran/bin/g++
CXX98=/usr/local/gfortran/bin/g++
CXX11=/usr/local/gfortran/bin/g++
CXX14=/usr/local/gfortran/bin/g++
CXX17=/usr/local/gfortran/bin/g++
Спасибо, Джаред, я понял $ git -C "/usr/local/Homebrew/Library/Taps/homebrew/homebrew-core" fetch --unshallow fatal: --unshallow on a complete repository does not make sense
Есть идеи, почему?
Мой доморощенный в настоящее время беспорядок из-за QGIS, но, надеюсь, как только я решу это на следующий день или около того, ваше решение будет работать.
Brew исправлен, и ваш рабочий процесс исправил эту установку. Большое спасибо :)
После всего этого я все еще получаю сообщение об ошибке ld: framework not found CoreFoundation
Пытаюсь понять, почему это не сработало... во-первых, моя версия gfortran, похоже, использует библиотеки версии gcc, отличной от той, что указана в файле Makevars выше. У моего /usr/local/gfortran/lib/gcc/x86_64-apple-darwin15/6.1.0
. Изменение makevars для использования не помогает.
Спасибо за ответ! Сейчас еще раз все перепроверил и целиком, и еще раз перезапустил brew reinstall gcc
, увидев ваше сообщение.. У меня там до сих пор лежит папка x86_64-apple-darwin15/6.1.0. Любые предложения будут очень, очень приветствуются!
Только что заметил, что когда бегаю reinstall gcc
он как бы переливается на /usr/local/Cellar/gcc/10.2.0
. Есть идеи, почему он будет использовать этот адрес вместо этого?
После всех шагов и перезапуска я получил ld: framework not found CoreFoundation
. У меня сработала установка свежего gfortran для R/Mac: github.com/fxcoudert/gfortran-for-macOS/releases/tag/…
@speleo, вот и все! Установка gfortran по этой ссылке решила эту проблему для меня. Немного колебался, учитывая, что репозиторий только от исследователя, но мой R снова заработал, большое-большое спасибо!
На самом деле есть альтернативное предложение по установке этой ссылки gfortran. То есть использовать версию gfortran, которую brew предоставляет с gcc, но я думаю, что для этого требуются строки makevars, отличные от приведенных выше. Смотрите эту ссылку: github.com/Homebrew/homebrew-cask/issues/96135
Рад, что у тебя все получилось @Florag! Извините, я был не в сети на Рождество/Новый год и не смог помочь вам решить проблему. Насколько я понимаю, brew reinstall gcc
связал фортран 'gcc' brew с /usr/local/gfortran, но, видимо, это не так в системах других людей - спасибо @speleo за дополнительное устранение неполадок!
@speleo и @jared_mamrot, вы оба спасли меня, спасибо! Я получаю сообщение ld: warning: dylib (/usr/local/opt/llvm/lib/libunwind.dylib) was built for newer macOS version (11.0) than being linked (10.16)
после использования свежей ссылки gfortran. Вы также?
@ user551504 это предупреждение связано со статически связанными библиотеками llvm. Вы можете избежать этого предупреждения, удалив llvm (brew uninstall llvm
) и ссылки на llvm из файла .R/Makevars, и многие пакеты по-прежнему будут компилироваться, но некоторые не будут выполняться. К сожалению, все еще есть некоторые пакеты, которые я не смог скомпилировать после выполнения этих шагов, например. rstan - но большинство пакетов успешно компилируются.
@jared_mamrot, что, если на первом шаге написано Error: unexpected symbol in "sudo rm"
?
Только что заметил этот (проигнорированный) вопрос, который выглядит связанным stackoverflow.com/questions/65047685/…