代码之家  ›  专栏  ›  技术社区  ›  Grubbmeister

R不识别GSL库未定义的引用

  •  0
  • Grubbmeister  · 技术社区  · 6 年前

    我正在R中安装github的一个包(链接: https://github.com/aliceyiwang/mvabund ),使用devtools。我已使用另一个软件包的说明安装了Rtools(此处: https://cran.r-project.org/web/packages/dynr/vignettes/InstallationForUsers.pdf

    我已经将Windows系统环境变量LIB_GSL设置为 "C:/R/local323" "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 回复  |  直到 6 年前
        1
  •  2
  •   Grubbmeister    6 年前

    我将包括这个问题的完整答案,因为它不存在于其他任何地方,它修复了这个问题中的错误,在这个问题中: Installing R package from github returns non-zero exit status error; GSL and Rtools correctly installed

    在执行任何操作之前,请确保未将R安装到文件名中带有空格的位置。例如,我们不需要C:\Program Files\R,因为它有一个空间,而且众所周知,空间会让死亡机器人进入,这会破坏您的安装。

    然后安装RTools(并且,当您安装RTools时:文件名中没有空格…安装可能需要一段时间)和GSL库,请严格遵循此处的Windows说明:

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

    (此处为R的GSL库: http://www.stats.ox.ac.uk/pub/Rtools/libs.html Rtools here-下载最新的冻结版本(目前为: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
    
    推荐文章