R包无法在Windows上加载DLL

时间:2017-08-08 06:58:33

标签: r rcpp r-package

我是https://github.com/shians/scpipe的开发人员,目前该程序包无法在Windows上构建。

Error: package or namespace load failed for 'scPipe' in inDL(x, as.logical(local), as.logical(now), ...):
 unable to load shared object 'C:/Users/pkgbuild/AppData/Local/Temp/RtmpAlOaQo/Rinst35046f5f2410/scPipe/libs/x64/scPipe.dll':
  LoadLibrary failure:  The specified module could not be found.

完整日志here

此软件包应该可以使用

进行安装
devtools::install_github("shians/scpipe")
但是很明显它会失败。但它至少会安装所有相关的依赖项,然后您可以下载源代码以进一步检查。

我已监视安装目标,以确保在尝试加载时确实存在scPipe.dll。除此之外,我不知道还能诊断出什么。

与Linux,macOS和Windows唯一明显不同的是Makevars文件,我根据zlibbioc和Rhtslib的说明设置。

我找不到任何可能导致此错误的资源。如果有人能够对此有所了解,我们将不胜感激。 This SO thread是最接近的,但我没有看到任何适用的解决方案,用我的包改变用户的PATH设置显然是不可行的。

编辑:

Makevars.win中的命令扩展为

Rhtslib::pkgconfig("PKG_LIBS")
-L"C:/Users/su.s/Documents/R/win-library/3.4/Rhtslib/lib/x64" -lhts -lz -pthread -lws2_32

zlibbioc::pkgconfig("PKG_CFLAGS")
-I"C:/Users/su.s/Documents/R/win-library/3.4/zlibbioc/include"

zlibbioc::pkgconfig("PKG_LIBS_shared")
-L"C:/Users/su.s/Documents/R/win-library/3.4/zlibbioc/libs/x64" -lzlib1bioc

分别导致DLL的完整编译消息

c:/Rtools/mingw_64/bin/g++ -shared -s -static-libgcc -o scPipe.dll tmp.def RcppExports.o cellbarcode.o detect_barcode.o parsebam.o parsecount.o rcpp_scPipe_func.o transcriptmapping.o trimbarcode.o utils.o -LC:/Users/su.s/Documents/R/win-library/3.4/Rhtslib/lib/x64 -lhts -lz -pthread -lws2_32 -LC:/Users/su.s/Documents/R/win-library/3.4/zlibbioc/libs/x64 -lzlib1bioc -Ld:/Compiler/gcc-4.9.3/local330/lib/x64 -Ld:/Compiler/gcc-4.9.3/local330/lib -LC:/PROGRA~1/R/R-34~1.1/bin/x64 -lR

据我所知,它符合5.8.2 of Writing R Extensions

1 个答案:

答案 0 :(得分:0)

你在上面评论说“我只是按照指示......”。很抱歉告诉你,但这些说明看起来很垃圾。我在Windows上找不到任何其他使用这种方法的软件包,它似乎脆弱;我可以使用cmd.exe安装您的软件包,但它使用Windows bash提示失败。

无论如何,你所拥有的是Windows上的链接器错误。 R报告这些很糟糕。您需要做的是使用--no-test-load安装软件包,然后使用“Dependency Walker”检查已安装的.dll。在这种情况下,生成的二进制文件对zlib1bioc.dll,有直接的二进制依赖,我认为根本不支持。您需要重新构建代码以避免这种情况。 ,其中包含5.8.2,编写R扩展。