Ошибка компиляции при установке Rcpp - PullRequest
5 голосов
/ 21 марта 2020

У меня виртуальная машина с 8 ГБ ОЗУ, Debian 9, версия R R 3.3.

У меня есть этот сценарий R.

install.packages("Rcpp")

Моя машина выдала мне эту ошибку.

* installing *source* package ‘Rcpp’ ...
** package ‘Rcpp’ successfully unpacked and MD5 sums checked
** libs
g++ -I/usr/share/R/include -DNDEBUG -I../inst/include/     -fpic  -g -O2 -fdebug-prefix-map=/build/r-base-3.3.3=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -g  -c api.cpp -o api.o
In file included from ../inst/include/RcppCommon.h:135:0,
                 from ../inst/include/Rcpp.h:27,
                 from api.cpp:24:
../inst/include/Rcpp/lang.h: In function ‘SEXPREC* Rcpp::Rcpp_list7(SEXP, SEXP, SEXP, SEXP, SEXP, SEXP, SEXP)’:
../inst/include/Rcpp/lang.h:45:55: error: ‘Rf_list6’ was not declared in this scope
     x0 = Rf_cons(x0, Rcpp_list6(x1, x2, x3, x4, x5, x6));
                                                       ^
../inst/include/Rcpp/lang.h: In function ‘SEXPREC* Rcpp::Rcpp_lang7(SEXP, SEXP, SEXP, SEXP, SEXP, SEXP, SEXP)’:
../inst/include/Rcpp/lang.h:53:56: error: ‘Rf_list6’ was not declared in this scope
     x0 = Rf_lcons(x0, Rcpp_list6(x1, x2, x3, x4, x5, x6));
                                                        ^
/usr/lib/R/etc/Makeconf:141: recipe for target 'api.o' failed
make: *** [api.o] Error 1
ERROR: compilation failed for package ‘Rcpp’
* removing ‘/home/chris/R/x86_64-pc-linux-gnu-library/3.3/Rcpp’

The downloaded source packages are in
        ‘/tmp/RtmppHiNzX/downloaded_packages’
Warning message:
In install.packages("Rcpp") :
  installation of package ‘Rcpp’ had non-zero exit status

Мне нужно установить этот пакет. Почему это не сработает?

1 Ответ

11 голосов
/ 21 марта 2020

Вы работаете с R 3.3. * - основная версия выпуска почти четыре года сделала go устаревшей - и вы пытаетесь установить R cpp 1.0.4, которая была выпущена this неделя . Несоответствие.

R 3.3. * Больше не проверяется в CRAN, так как ошибка была пропущена перед выпуском. Так что вам стоит подумать об обновлении - на CRAN есть даже бэкпорты, дающие вам двоичные файлы Debian для вашего выпуска. Или, если вы предпочитаете старое программное обеспечение, такое как R 3.3. *, Используйте версию R cpp от четырех лет go. Требование, чтобы смешивание и сопоставление работали для всех комбинаций, является растяжкой.

Теперь проблема сборки обсуждалась в заявке № 1048 в репо - и связанной с этим проблеме # 1053 затронул другой пакет. И все это было исправлено в PR, описанных в закрытой вкладке PR . Так что теперь вы можете получить доступ к новой промежуточной версии, в настоящее время R cpp 1.0.4.3, из обычного репо R cpp 'drat' через

install.packages("Rcpp", repos="https://rcppcore.github.io/drat")

Все это обсуждалось на Список рассылки r cpp , на который указывают FAQ по R cpp, файл описания пакета и многие другие места.

Короче говоря, R cpp 1.0.4 был тщательно протестирован против всех эталонных платформ CRAN (но это НЕ включает в себя устаревшую версию R 3.3. *, которую вы по-прежнему выбираете для запуска). Точно так же мы запускаем полные проверки обратной зависимости для всех 1800+ пакетов CRAN - но только для Linux. Это занимает у меня дни. И все же на этот раз нас укусила единственная проблема обратной зависимости , затрагивающая только macOS . Чтобы понять это, нам нужна помощь в тестировании от пользователей MacOS.

Аналогично, похоже, что в одном пакете BioConductor также была проблема (похожая на вашу). Для этого было бы неплохо, если бы пользователи BioConductor могли помочь в тестировании.

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

Подводя итог: если вы хотите current CRAN пакеты, такие как R cpp 1.0.4, выпущенные на этой неделе, действительно лучше использовать (по крайней мере разумно) текущие R релизы, предпочтительно в разумно текущих выпусках ОС, так как они получат лучшее тестовое покрытие. Больше экзотических c комбинаций, таких как та, которую вы запускаете, рискуют быть укушенными. Мы очень стараемся избежать этого, но мы одни не можем проверить все комбинации. Помощь всегда приветствуется!

Редактировать: Забыл добавить, когда sudo apt-get install r-cran-rcpp, конечно, установит гарантированную для вас версию R cpp для вас. Тот из твоего дистрибутива. Трудность, с которой вы столкнулись, связана с старым Debian, который вы используете (предположительно по соображениям стабильности) и новым R cpp. Если стабильность имеет первостепенное значение, используйте R cpp, который содержит ваш дистрибутивный выпуск.

Другое редактирование (2020-04-09): К настоящему времени и в координации с CRAN выпущен патч R cpp 1.0.4.6 теперь на CRAN и также избегает этой проблемы. Еще раз, я могу только убедить людей с «нестандартными настройками» (как определено, скажем, в отличие от того, что тестируется в CRAN) для тестирования предварительных выпусков. Просто нет другого способа узнать до релиза , чем протестировать кандидата на релиз . Помощь в этом всегда ценится.

...