【问题标题】:Building an R package that uses the GSL on Windows在 Windows 上构建使用 GSL 的 R 包
【发布时间】:2017-10-03 01:39:32
【问题描述】:

我对 Windows 开发知之甚少。我编写了一个在 Linux 上运行良好的 R 包。我正试图让它在 Windows 上工作。不幸的是,我觉得我只是碰壁了。该软件包使用 GSL 库。我做的第一件事是使用 mingw-w64 编译它,它按预期工作。然后我开始构建包。一切都很好,直到 R 测试是否可以加载包。我收到此错误消息:

Error in inDL(x, as.logical(local), as.logical(now), ...) :
  impossible de charger l'objet partagé 'C:/Users/Patrick/Desktop/r_packages/Bayes.mix.biv.reg/libs/x64/Bayes.mix.biv.reg.dll':
  LoadLibrary failure:  %1 is not a valid Win32 application.

法语部分可以翻译成“无法加载共享对象”。

我不明白为什么会失败。这是生成 dll 的行:

x86_64-w64-mingw32-gcc -shared -s -static-libgcc -o Bayes.mix.biv.reg.dll tmp.def DICWAIC.o Utils.o wrapperV11.o wrapperV11woallocations.o -LC:/PROGRA~1/R/R-3.3.3/bin/x64 -LC:/MinGW/msys/1.0/gsl/lib -lgsl -lgslcblas -Ld:/Compiler/gcc-4.9.3/local330/lib/x64 -Ld:/Compiler/gcc-4.9.3/local330/lib -LC:/PROGRA~1/R/R-33~1.3/bin/x64 -lR

x86_64-w64-mingw32-gcc 来自 Rtools。 Bayes.mix.biv.reg.dll 怎么可能不是有效的 Win32 应用程序?

【问题讨论】:

    标签: r windows gsl


    【解决方案1】:

    即使不打算使用 Rcpp 或 RcppGSL,您也可以遵循 RcppGSL 中包含的示例包

    its src/Makevars.win 中有这个

    ## This assumes that the LIB_GSL variable points to working GSL libraries
    PKG_CPPFLAGS=-I$(LIB_GSL)/include
    PKG_LIBS=-L$(LIB_GSL)/lib -lgsl -lgslcblas 
    

    与其他一些软件包一样,这里的关键是您真的非常想要依赖预构建的库。

    【讨论】:

    • 感谢您的快速回复。我基本上使用的是相同的 Makevars。我将尝试预建库。
    • 许多其他软件包也使用相同的...因为我们可以“按照惯例”假设 CRAN Windows 构建机器具有 LIB_GSL 集。您也可以使用适当的 env.vars 下载该库并在本地进行测试。
    • 也许这是一个愚蠢的问题,但我在哪里可以获得适当的预构建二进制文件?我发现的唯一一个是为 Visual Studio Community 编译的,不能很好地与 mingw-64 配合使用。
    • 不,不,不——不是VS。他们挂在 CRAN 附近的某个地方。
    • 可以更好地记录,但我认为this is what you want。我过去使用过它(但这些天我很少在 Windows 上工作......)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多