R包PackageExample安装时dll未正常生成,加载失败求助
编译配置未匹配包名要求
你的R包src/Makevars.win配置大概率出错了——没把最终生成的动态链接库指定为PackageExample.dll。如果编译脚本里只把foo设为编译目标,就会生成foo.dll和foo.o,但R包加载时默认寻找与包名一致的DLL文件,直接导致加载失败。
同时,链接chron.dll的参数可能也没配对:比如PKG_LIBS里没正确指定chron.dll的路径,或者没把chron.dll所在目录加入链接器的搜索路径,导致生成的DLL找不到依赖的chron模块。RTools环境变量配置不完整
虽然你设置了PATH和BINPREF,但RTools42在非标准路径下,可能部分编译工具(比如链接器ld)没正确识别依赖库位置。比如BINPREF是否覆盖了所有编译工具的前缀?要是只设了gcc的路径,链接器可能还是找不到正确的库文件。另外,chron.dll所在目录有没有加入系统PATH或R的环境变量?加载R包时系统找不到chron.dll,就会报“依赖模块未找到”。包描述文件或临时编译环境异常
检查DESCRIPTION文件里的Package字段是不是准确设为PackageExample?如果字段名和预期包名不匹配,编译系统没法生成对应名称的DLL。另外devtools::check()在临时目录编译时,可能你的配置文件没被正确读取,也会导致编译产物名称出错。chron库的链接方式不对
你是不是直接链接了chron.dll?R包的动态库需要对应的导入库(比如chron.lib)才能正确解析符号,要是没用到导入库,生成的DLL加载时会因找不到依赖符号,表现为“依赖模块未找到”。另外还要确认chron包版本和R4.2.2兼容,版本不匹配也会引发依赖问题。
内容的提问来源于stack exchange,提问作者gcc

