Clang-7: ошибка: сбой команды компоновщика с кодом выхода 1 для macOS Big Sur

Установка пакетов 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. Любые предложения приветствуются.

Только что заметил этот (проигнорированный) вопрос, который выглядит связанным stackoverflow.com/questions/65047685/…

geotheory 11.12.2020 14:17

Многие другие люди натыкаются на ту же проблему. pbs.twimg.com/media/EbLLgorUcAEpWYf?format=png&name=900x900

IRTFM 13.12.2020 22:20

Спасибо @IRTFM. Хотя очень неприятный!

geotheory 14.12.2020 00:07

Возможно, лучше связаться со списком рассылки R-MAC-sig.

IRTFM 14.12.2020 08:24

Я застрял с той же проблемой. Я пробовал r-macos-rtools, но установка не работает для Big Sur. Вот некоторая информация о том, как исправить установку, хотя мне это не удалось: github.com/rmacoslib/r-macos-rtools/issues/42

epsilone 15.12.2020 20:58
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
19
5
17 590
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это было сложно, но вот шаги, которые я использовал для компиляции пакетов R из исходного кода в MacOS Big Sur:

  1. Переустановите инструменты командной строки xcode

(не верьте обновлению программного обеспечения, если оно говорит «обновлено» — он лжет — brew doctor сказал, что моя версия на самом деле старая)

sudo rm -rf /Library/Developer/CommandLineTools
sudo xcode-select --install
  1. Установите gcc и llvm через Homebrew (инструкция по установке Homebrew) или, если у вас уже установлен gcc/llvm, перейдите к следующему шагу.
# WARNING: This can take several hours
brew install gcc
brew install llvm
  1. Если у вас уже установлены gcc и llvm через Homebrew:
brew cleanup
brew update
brew upgrade
brew reinstall gcc
brew reinstall llvm
  1. Связать некоторые заголовки с /usr/local/include
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
  1. Отредактируйте файл ~/.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
  1. Скомпилируйте пакет из исходников в R/Rstudio
# 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")

Обновление (2022/04/05)

У меня возникла ошибка при обновлении "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 Есть идеи, почему?

geotheory 17.12.2020 14:38

Мой доморощенный в настоящее время беспорядок из-за QGIS, но, надеюсь, как только я решу это на следующий день или около того, ваше решение будет работать.

geotheory 18.12.2020 01:38

Brew исправлен, и ваш рабочий процесс исправил эту установку. Большое спасибо :)

geotheory 20.12.2020 01:44

После всего этого я все еще получаю сообщение об ошибке ld: framework not found CoreFoundation

Florag 24.12.2020 10:32

Пытаюсь понять, почему это не сработало... во-первых, моя версия gfortran, похоже, использует библиотеки версии gcc, отличной от той, что указана в файле Makevars выше. У моего /usr/local/gfortran/lib/gcc/x86_64-apple-darwin15/6.1.0. Изменение makevars для использования не помогает.

Florag 24.12.2020 10:55

Спасибо за ответ! Сейчас еще раз все перепроверил и целиком, и еще раз перезапустил brew reinstall gcc, увидев ваше сообщение.. У меня там до сих пор лежит папка x86_64-apple-darwin15/6.1.0. Любые предложения будут очень, очень приветствуются!

Florag 24.12.2020 13:31

Только что заметил, что когда бегаю reinstall gcc он как бы переливается на /usr/local/Cellar/gcc/10.2.0. Есть идеи, почему он будет использовать этот адрес вместо этого?

Florag 24.12.2020 14:53

После всех шагов и перезапуска я получил ld: framework not found CoreFoundation. У меня сработала установка свежего gfortran для R/Mac: github.com/fxcoudert/gfortran-for-macOS/releases/tag/…

speleo 29.12.2020 22:45

@speleo, вот и все! Установка gfortran по этой ссылке решила эту проблему для меня. Немного колебался, учитывая, что репозиторий только от исследователя, но мой R снова заработал, большое-большое спасибо!

Florag 03.01.2021 13:01

На самом деле есть альтернативное предложение по установке этой ссылки gfortran. То есть использовать версию gfortran, которую brew предоставляет с gcc, но я думаю, что для этого требуются строки makevars, отличные от приведенных выше. Смотрите эту ссылку: github.com/Homebrew/homebrew-cask/issues/96135

Florag 03.01.2021 14:41

Рад, что у тебя все получилось @Florag! Извините, я был не в сети на Рождество/Новый год и не смог помочь вам решить проблему. Насколько я понимаю, brew reinstall gcc связал фортран 'gcc' brew с /usr/local/gfortran, но, видимо, это не так в системах других людей - спасибо @speleo за дополнительное устранение неполадок!

jared_mamrot 03.01.2021 23:37

@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 02.02.2021 04:04

@ user551504 это предупреждение связано со статически связанными библиотеками llvm. Вы можете избежать этого предупреждения, удалив llvm (brew uninstall llvm) и ссылки на llvm из файла .R/Makevars, и многие пакеты по-прежнему будут компилироваться, но некоторые не будут выполняться. К сожалению, все еще есть некоторые пакеты, которые я не смог скомпилировать после выполнения этих шагов, например. rstan - но большинство пакетов успешно компилируются.

jared_mamrot 05.02.2021 00:19

@jared_mamrot, что, если на первом шаге написано Error: unexpected symbol in "sudo rm"?

nilsinelabore 20.04.2021 03:04

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