我正在更新我最近在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
环境变量,替换为:
安装过程确实希望将mingw 32用于g ++和gcc可执行文件。安装成功,没有警告或错误。
但是,当我尝试用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是将某些int
替换为typedef int16_t xint
。
问题似乎是软件包的源文件夹中存在64位dll(由错误消息暗示),由'devtools'创建。
一旦删除这些文件,load_all
就会使用32位编译器愉快地重新创建它们。