Ошибка "/bin/sh: XX: команда не найдена" при попытке установить разрабатываемую версию R fst пакета из github

Я пытаюсь установить разрабатываемую версию fst пакет из github. (Я хочу версию для разработки, потому что она поддерживает классы столбцов при сохранении фреймов данных, тогда как текущая выпущенная версия - нет.)

Первоначально установка не удалась из-за отсутствия поддержки OpenMP. Я решил это (я думаю), выполнив шаги здесь для R 3.4.0 на OSX.

Однако теперь я получаю следующую ошибку: /bin/sh: XX: command not found, Я уже установил, какие должны быть соответствующие пути в ~/.R/Makevars файл, поэтому я не уверен, что делать дальше, чтобы устранить ошибку.

Вот мой код и вывод:

Первая попытка установитьfstперед добавлением поддержки OpenMP

devtools::install_github("fstPackage/fst", ref = "develop")

* установка * исходного * пакета 'fst'...
** libs
clang ++ -std = gnu ++ 11 -I / Library / Frameworks / R.framework / Resources / include -DNDEBUG -fopenmp -I. -Ifstcore -Ifstcore / LZ4 -Ifstcore / ZSTD -Ifstcore / ZSTD / common -Ifstcore / ZSTD / распаковка -Ifstcore/ZSTD/compress -I"/Library/Frameworks/R.framework/Versions/3.4/Rescc/library include "-I / usr / local / opt / gettext / include -I / usr / local / opt / llvm / include -fPIC -Wall -g -O2 -c FastStore.cpp -o FastStore.o
clang: ошибка: неподдерживаемая опция '-fopenmp'
make: *** [FastStore.o] Ошибка 1
ОШИБКА: ошибка компиляции для пакета 'fst'

Добавление поддержки OpenMP

Чтобы добавить поддержку OpenMP, я выполнил следующие действия для R 3.4.0, включая установку gfortran 6.1 отсюда и clang используя предустановленный установщик OSX GUI, предоставленный здесь. Затем, в соответствии с инструкциями, я добавил следующее ~/.R/Makevars файл:

CC=/usr/local/clang4/bin/clang
CXX=/usr/local/clang4/bin/clang++
CXX11=$CXX
CXX14=$CXX
CXX17=$CXX
CXX1X=$CXX
LDFLAGS=-L/usr/local/clang4/lib

Вторая попытка установитьfst

Затем я снова запустил код установки и получил следующую ошибку:

devtools::install_github("fstPackage/fst", ref = "develop")

* установка * исходного * пакета 'fst'...
** libs
XX -std = gnu ++ 11 -I / Library / Frameworks / R.framework / Resources / include -DNDEBUG -fopenmp -I. -Ifstcore -Ifstcore / LZ4 -Ifstcore / ZSTD -Ifstcore / ZSTD / common -Ifstcore / ZSTD / распаковка -Ifstcore/ZSTD/compress -I"/Library/Frameworks/R.framework/Versions/3.4/Rescc/library include "-I / usr / local / include -fPIC -Wall -g -O2 -c FastStore.cpp -o FastStore.o
/ bin / sh: XX: команда не найдена
make: *** [FastStore.o]
Ошибка 127 ОШИБКА: ошибка компиляции для пакета 'fst'

В дополнение к ошибкам, я вижу, что вывод установки начинается с clang++ -std=gnu++11 ... в первой попытке и XX -std=gnu++11 ... во второй попытке. Я предполагаю, что мне нужно рассказать R (или другой программе) о пути к clang, но я не уверен, какой путь нужен или где его поставить (а не Makevars файл должен позаботиться об этом?), или есть ли другие проблемы, которые также необходимо исправить.

Вот некоторые подробности о моей системе:

Macbook Pro, OSX Sierra (версия 10.12.5)

RStudio версия 1.0.153

R Информация о сеансе

R version 3.4.1 (2017-06-30)
Platform: x86_64-apple-darwin15.6.0 (64-bit)
Running under: macOS Sierra 10.12.5

Matrix products: default
BLAS: /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/3.4/Resources/lib/libRlapack.dylib

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

loaded via a namespace (and not attached):
 [1] httr_1.2.1      compiler_3.4.1  R6_2.2.2        tools_3.4.1     withr_1.0.2    
 [6] curl_2.8.1      memoise_1.1.0   git2r_0.19.0    digest_0.6.12   devtools_1.13.2

ОБНОВЛЕНИЕ: Основываясь на комментарии @MarkPlotnick, я изменил Makevars следующим образом:

CC=/usr/local/clang4/bin/clang
CXX=/usr/local/clang4/bin/clang++
CXX11=$(CXX)
CXX14=$(CXX)
CXX17=$(CXX)
CXX1X=$(CXX)
LDFLAGS=-L/usr/local/clang4/lib

Это привело к следующей ошибке:

* установка исходного пакета 'fst'...
** libs /Users/eipi10/.R/Makevars:7: *** Рекурсивная переменная `CXX'ссылается на себя (в конце концов). Стоп.
ОШИБКА: ошибка компиляции для пакета 'fst'

3 ответа

Я столкнулся с проблемой и выяснил решение на основе комментария @Dirk в ошибке "/bin/sh: XX: команда не найдена" при попытке установить версию разработки R fst-пакета из github.

Я явно установил библиотеки в.R/Makevars:

CXX11=/usr/local/clang4/bin/clang++
CXX14=/usr/local/clang4/bin/clang++
CXX17=/usr/local/clang4/bin/clang++
CXX1X=/usr/local/clang4/bin/clang++

Это сработало для меня, когда я столкнулся с этой проблемой, хотя на моем Mac путь к двоичному /Library/Developer/CommandLineTools/usr/bin/clang++)

Сегодня столкнулся именно с этой проблемой. Благодаря совету, данному user2554472, я придумал рабочий файл без необходимости копировать/вставлять полный путь компилятора C++ во все остальныеCXXпеременные. СледующееMakevarsфайл с использованием формата GNU Makefile отлично работает:

      CC:=/usr/local/clang4/bin/clang
CXX:=/usr/local/clang4/bin/clang++
CXX11:=$(CXX)
CXX14:=$(CXX)
CXX17:=$(CXX)
CXX1X:=$(CXX)
LDFLAGS:=-L/usr/local/clang4/lib

Протестировано с использованиемdevtools::install_githubдля установки пакетов, требующих компиляции в macOS.

Примечание: поскольку в моей системе Mac используется GNU GCC, установленный из Homebrew , фактические пути компиляторов C и C++ вместе с библиотекой в ​​моей системе:

      CC:=/usr/local/bin/gcc-12
CXX:=/usr/local/bin/g++-12
LDFLAGS:=-L/usr/local/Cellar/gcc/12.2.0/lib/gcc/12
/bin/bash: lz4c: command not found

sudo apt-get install liblz4c-tool
Другие вопросы по тегам