【问题标题】:Unable to load the Rcpp Package in Windows Server 2008无法在 Windows Server 2008 中加载 Rcpp 包
【发布时间】:2014-05-28 16:31:13
【问题描述】:

我一直在尝试在 Windows Server 2008 R2 平台上加载最新版本的 Rcpp 包(GIT 版本 XXXX)。当我这样做时,我收到以下错误:

> library(Rcpp)
Error : .onLoad failed in load Namespace() for 'Rcpp', details:
  call: new_dummyObject(.dummyInstancePointer)
  error: object 'class__dummyInstance' not found
In addition: Warning message:
package 'Rcpp' was built under R version 3.0.3
Error: package or namespace load failed for 'Rcpp'

我已经在GitHub 上与其中一位软件包作者讨论过这个问题,我们确定这很可能是本地问题。 (经过更仔细的调查后说,该帖子中的问题与我得到的问题并不完全相同)我能够使用 Windows Server 2003 使用 R 版本 3.0.1 和 3.0.3 加载相同的包。为方便起见,我在此处处理链接帖子的部分内容。我生成包的过程如下:

  1. 从 Github 下载了最新的主代码(应提交 5b510ed)
  2. 在临时目录中解压 zip 文件并将“Rcpp-master”重命名为“Rcpp”
  3. 已安装 Rtools 3.1 版
  4. 确保 RTools bin 和相关的 gcc bin 目录位于我路径的开头
  5. 使用命令“R CMD BUILD Rcpp”生成Rcpp_0.11.1.2.tar.gz文件
  6. 使用命令“R CMD INSTALL --build --compile-both Rcpp_0.11.1.2.tar.gz 生成Rcpp_0.11.1.2.zip
  7. 将生成的 zip 存档复制到 Windows Server 2008 机器
  8. 使用R原生安装本地包安装Rcpp包

根据包作者的建议,我查看了工作和不工作 R 版本的 .libPaths() 输出。在这两种情况下,输出完全相同:

[1] "\\\\vnxserver/home/MYACCT/My Documents/R/win-library/3.0"
[2] "C:/Program Files/R/R-3.0.2/library"

我真的不知道在调试链中接下来要尝试什么,我希望一些 SO 社区可以为我指明正确的方向。 (这就是为什么我在这里重新发布)。欢迎任何cmets。

虽然我在前面那段发过,但可能不太清楚GitHub上的相关讨论在https://github.com/RcppCore/Rcpp/issues/147

【问题讨论】:

  • 其他有助于确认的事情:R 'native install' 是什么版本?您确定要安装在.libPaths() 的输出中表示的库中吗? R 实际上指向该系统的哪个位置?它是什么版本? R CMD INSTALL 说它安装在哪个库中?
  • 你已经问了很多很好的后续问题。我已验证该库实际上已安装在第一个 .libPaths() 输出位置。经过一些进一步的工作,我想我可能已经发现了这个问题。系统当前已设置,因此我无法从我的主目录(以及下面的所有目录)执行二进制应用程序。我相信 Windows 不允许正确加载导致问题的 dll 文件。希望我会在星期一对此进行调查并得到答案。如果这是问题所在,那么 R 应该给我一个警告。

标签: windows r git rcpp


【解决方案1】:

在努力正确调试问题后,从长远来看,问题出在 Windows 上。我们的安全管理员设置了系统的权限,使得 dll 文件无法从特定目录加载。在与我们的 IT 人员合作后,我能够将使用 dll 文件的 R 包放置在一个特殊位置,然后使用 .libPaths() 函数将该特殊位置添加到库搜索路径中。为了使最终用户更容易,我在系统范围的RProfile.site 文件中放置了适当的代码来处理这个额外的库搜索目录问题。

问题解决了……

顺便说一句,我认为 R 在尝试打开库并且没有任何关联符号时应该通知发生了一些奇怪的事情......至少是一个警告......

我已编辑此答案以从我的 Rprofile.site 文件中获取相关的片段,以将目录添加到库搜索路径。文件放在c:/program files/R/R-3.0.2/etc

.First = function() {
  cat('Adding LocalLibrary to the Library Search Path ... ')
  .libPaths(c(.libPaths(), <your library path you want to add>))

  if(<your path you want to add> %in% .libPaths()) {
    cat('Success\n')
  } else {
    cat('Failure\n')
    cat('You may encounter problems using libraries that depend on dynamically loaded dll files\n')
  }
}

【讨论】:

  • 您好,我遇到了同样的问题。你能分享 Rprofile.site 代码解决方案吗?非常感谢。
  • 我已更新我的答案以显示使用的代码。希望对您有所帮助。
  • @JustaceClutter 我知道你很久以前就做到了,但我遇到了非常相似的问题。我得到的错误完全相同。 R 安装在我的 Windows 7 机器上。这是一台工作计算机,因此我们可能正在运行 Windows Server。但我确定 R 安装在 C 盘上。您能解释一下您使用的文件夹设置吗?我向我们的 IT 团队展示了您的帖子,但不知道如何解决这个问题。
  • 我不开窗……抱歉。我只是按照我们的 IT 团队所说的去做。他们锁定了系统,因此无法从我们的用户目录加载/执行 dll 和 exe。
  • 经过几个月的尝试,我终于让它工作了。正如@JustaceClutter 所说,这是 IT 安全问题。我与 IT 坐下来,他们使用他们的安全软件来查看当我运行包时哪些文件被他们的防火墙阻止。实际上,所有.dll 文件都被阻止了。他们想出了一套规则,允许我从硬盘驱动器上的单独文件夹中运行 R 包,而无需授予我对该文件夹的管理员权限。但您真正需要的只是一个具有管理员权限的文件夹。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-25
  • 2011-01-23
  • 1970-01-01
相关资源
最近更新 更多