R не распознает неопределенные ссылки библиотеки GSL - PullRequest
0 голосов
/ 12 декабря 2018

Я устанавливаю пакет из github в R (ссылка здесь: https://github.com/aliceyiwang/mvabund), с использованием devtools. Я установил Rtools, используя инструкции для другого пакета (здесь: https://cran.r -project.org /web / packages / dynr / vignettes / InstallationForUsers.pdf ) и все проверки показывают, что GSL и RTools установлены правильно.

Я установил системные переменные среды Windows LIB_GSL (как "C:/R/local323")) и PATHS (как "C:/RTools/bin/", "C:/RTools/mingw_64/bin", "C:/R/R-3.5.1/bin")

Я также запускаю следующий код в R перед установкой пакета:

Sys.setenv("LIB_GSL" = "C:/R/local323")
Sys.setenv(BINPREF = "C:/Rtools/mingw_$(WIN)/bin/")
Sys.setenv(PATH = paste(Sys.getenv("PATH"), "C:/RTools/bin/",
                        "C:/RTools/mingw_64/bin", "C:/R/R-3.5.1/bin", sep = ";"))

Вопрос:

Когда я запускаю:

devtools::install_github("aliceyiwang/mvabund")

Код хорошо запускается и начинает установку пакета. Однако, когда это происходит, наступает момент:

[...excluded very long list of undefined references like that below...]
summary.o:summary.cpp:(.text+0x194c): undefined reference to `gsl_vector_free'
    collect2.exe: error: ld returned 1 exit status
    no DLL was created
    ERROR: compilation failed for package 'mvabund'
    * removing 'C:/R/R-3.5.1/library/mvabund'
    In R CMD INSTALL
    Error in i.p(...) : 
      (converted from warning) installation of package ‘C:/Users/Joshua/AppData/Local/Temp/RtmpsPp5oY/file2154340c11f8/mvabund_4.0.tar.gz’ had non-zero exit status

Я предполагаю, что где-то,какой-то путь к этим функциям не был определен должным образом. Что я делаю неправильно?

Моя информация о сеансе

> sessionInfo()
R version 3.5.1 (2018-07-02)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows >= 8 x64 (build 9200)

Matrix products: default

locale:
[1] LC_COLLATE=English_Australia.1252  LC_CTYPE=English_Australia.1252    LC_MONETARY=English_Australia.1252
[4] LC_NUMERIC=C                       LC_TIME=English_Australia.1252    

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

other attached packages:
[1] usethis_1.4.0  devtools_2.0.1

loaded via a namespace (and not attached):
 [1] Rcpp_1.0.0        rstudioapi_0.8    magrittr_1.5      pkgload_1.0.2     R6_2.3.0          rlang_0.3.0.1    
 [7] tools_3.5.1       pkgbuild_1.0.2    sessioninfo_1.1.1 cli_1.0.1         withr_2.1.2       remotes_2.0.2    
[13] yaml_2.2.0        assertthat_0.2.0  digest_0.6.18     rprojroot_1.3-2   crayon_1.3.4      processx_3.2.1   
[19] callr_3.1.0       fs_1.2.6          ps_1.2.1          curl_3.2          testthat_2.0.1    memoise_1.1.0    
[25] glue_1.3.0        compiler_3.5.1    desc_1.2.0        backports_1.1.2   prettyunits_1.0.2
> 

1 Ответ

0 голосов
/ 12 декабря 2018

Я собираюсь включить полный ответ на эту проблему, так как он нигде больше не существует в одном месте, что исправляет ошибки в этом вопросе, и в этом: Установка пакета R из github возвращает ненулевое значениеошибка состояния выхода;Правильно установлены GSL и Rtools

Прежде чем что-либо делать, убедитесь, что R не установлен в месте с пробелами в имени файла.Например, нам не нужен C: \ Program Files \ R, потому что у него есть пробел, и, как мы все знаем, пробелы пропускают «смертельных ботов», которые разрушают вашу установку.

Затем установите RTools(и, когда вы устанавливаете RTools: в имени файла не должно быть пробелов ... может потребоваться некоторое время для установки) и библиотеки GSL следуют ОЧЕНЬ БЛИЖАЙШЕМУ инструкциям Windows здесь:

https://cran.r -project.org / web / packages / dynr / vignettes / InstallationForUsers.pdf

(библиотеки GSL для R здесь: http://www.stats.ox.ac.uk/pub/Rtools/libs.html Rtools здесь - загрузите последнюю замороженную версию (на данный момент: Rtools34.exe): https://cran.r -project.org / bin / windows / Rtools / )

Затем мы загружаем сжатую копию пакета из https://github.com/aliceyiwang/mvabund и распаковываем ее внаш рабочий каталог.

Теперь, используя описанный выше метод установки, библиотеки GSL находятся в двух папках, по одной для каждой из архитектур i386 и x64.К сожалению, файл Makevars.win в версии mvabund github не настроен для разграничения архитектур в этой настройке, поскольку он имеет только один путь для PKG_LIBS.

Итак, очистите файл Makevars.win и замените его.это с:

## This assumes that the LIB_GSL variable points to working GSL libraries
CXX_STD = CXX11
ARCH=x64
ifeq "$(WIN)" "64"
ARCH= i386
else
ARCH= x64
endif
PKG_CPPFLAGS = -I$(LIB_GSL)/include -I. -I../inst/include
PKG_LIBS=-L"$(LIB_GSL)\lib"$(R_ARCH_BIN) -lgsl -lgslcblas 

Затем мы запускаем следующий код.Замените пути к файлам вашими путями к файлам.

Sys.setenv("LIB_GSL" = "C:/R/local323") # Replace file path here; this is the GSL library location, same as you specified for LIB_GSL in the windows environment 
Sys.setenv(BINPREF = "C:/Rtools/mingw_$(WIN)/bin/") # Replace file path here
Sys.setenv(PATH = paste(Sys.getenv("PATH"), "C:/RTools/bin/", sep = ";")) # Replace file path here
Sys.setenv("PKG_LIBS"="-L$(LIB_GSL)/lib/$(R_ARCH_BIN) -lgsl -lgslcblas")
Sys.setenv("PKG_CPPFLAGS"="-I$(LIB_GSL)/include -I. -I../inst/include")

# this assumes you have unzipped the mvabund download in your working directory
file.rename("mvabund-master", "mvabund")
shell("R CMD build mvabund")
install.packages("mvabund_4.0.tar.gz", repos = NULL) #may need to replace file name
library("mvabund")

Давайте запустим анализ, тогда:

abund <- mvabund(dataset[,8:39]) #community matrix section of spreadsheet
treatment <- as.character(dataset$Treatment) #treatment variable
## pairwise comparison 
manyglm(abund ~ treatment) -> msolglm
anova(msolglm, pairwise.comp = treatment, nBoot = 9) #pairwise comparisons make it run longer
...