【发布时间】: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