R 无法识别 GSL 库未定义的引用
R not recognizing GSL library undefined references
我正在 R 中安装来自 github 的软件包(此处 link:https://github.com/aliceyiwang/mvabund), using devtools. I have installed Rtools, using the instructions for another package (here: 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
>
我将包括这个问题的完整答案,因为它不存在于一个地方,它修复了这个问题中的错误,并且在这个问题中:Installing R package from github returns non-zero exit status error; GSL and Rtools correctly installed
在执行任何操作之前,请确保 R 未安装到文件名中包含 spaces 的位置。例如,我们不想要 C:\Program Files\R,因为它有一个 space,而且众所周知,space 会让死亡机器人进入,它会破坏你的安装。
然后安装 RTools(并且,当您安装 RTools 时:文件名中没有 spaces...可能需要一段时间才能安装)和非常接近 Windows 的 GSL 库此处说明:
https://cran.r-project.org/web/packages/dynr/vignettes/InstallationForUsers.pdf
(此处为 R 的 GSL 库:
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 架构各一个。不幸的是,mvabund github 版本中的 Makevars.win 文件未设置为区分该设置中的体系结构,因为它只有一个路径用于 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
我正在 R 中安装来自 github 的软件包(此处 link:https://github.com/aliceyiwang/mvabund), using devtools. I have installed Rtools, using the instructions for another package (here: 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
>
我将包括这个问题的完整答案,因为它不存在于一个地方,它修复了这个问题中的错误,并且在这个问题中:Installing R package from github returns non-zero exit status error; GSL and Rtools correctly installed
在执行任何操作之前,请确保 R 未安装到文件名中包含 spaces 的位置。例如,我们不想要 C:\Program Files\R,因为它有一个 space,而且众所周知,space 会让死亡机器人进入,它会破坏你的安装。
然后安装 RTools(并且,当您安装 RTools 时:文件名中没有 spaces...可能需要一段时间才能安装)和非常接近 Windows 的 GSL 库此处说明:
https://cran.r-project.org/web/packages/dynr/vignettes/InstallationForUsers.pdf
(此处为 R 的 GSL 库: 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 架构各一个。不幸的是,mvabund github 版本中的 Makevars.win 文件未设置为区分该设置中的体系结构,因为它只有一个路径用于 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