【问题标题】:Building R package on win32: Unable to load shared object (.dll)在 win32 上构建 R 包:无法加载共享对象 (.dll)
【发布时间】:2020-09-03 23:42:56
【问题描述】:

我正在更新我上次在 R3.6 上发布(没有问题)的R package。我已经更新到 R 4.0.0 和 Rtools 40。

包在 64 位 R 上成功构建和运行。但我看到在 win builder 上,包的测试在 win32(但不是 win64)上失败。

为了诊断故障,我使用 32 位版本的 R 和 devtools::install(args= "--no-multiarch") 在我的 64 位 Windows 10 机器上构建包。 我已经编辑了PATH 环境变量,替换为:

  • C:\Program Files\R\R-4.0.0\bin\x64 C:\Program Files\R\R-4.0.0\bin\i386
  • C:\rtools40\mingw64\bin with C:\rtools40\mingw32\bin(我也试过 C:\rtools40\clang32\bin)

安装过程确实在寻找 g++ 和 gcc 可执行文件的 mingw32。安装成功,没有任何警告或错误。

但是,当我尝试使用 devtools::load_all() 加载包时,我看到:

Error in inDL(x, as.logical(local), as.logical(now), ...) : 
  unable to load shared object 'C:/path/to/PACKAGENAME/src/PACKAGENAME.dll':
  LoadLibrary failure:  %1 is not a valid Win32 application.

如果我改为运行library('PACKAGENAME'),然后运行测试,R GUI 将冻结并静默退出——与 win builder 上的故障平行。

我正在努力诊断为什么在 64 位上完美运行的 DLL 不能在 32 位架构上运行。我对 C++ 代码所做的唯一实质性 change 是将一些 ints 替换为 typedef int16_t xint

【问题讨论】:

    标签: c++ r dll 32bit-64bit r-package


    【解决方案1】:

    问题似乎是包的源文件夹中存在由“devtools”创建的 64 位 dll(如错误消息所示)。

    一旦这些文件被删除,load_all 会很高兴地使用 32 位编译器重新创建它们。

    【讨论】:

      猜你喜欢
      • 2015-07-14
      • 2015-09-30
      • 2017-03-11
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-23
      • 1970-01-01
      相关资源
      最近更新 更多