mer*_*erv 5 r cross-compiling conda-build conda-forge
help安装过程中自加载库我在 Conda Forge 基础设施 ( r-xml2-feedstock ) 上交叉编译R 包xml2时遇到了问题。Conda Forge *nix 为 R 构建,执行方式为:
R CMD INSTALL --no-test-load --build .\nRun Code Online (Sandbox Code Playgroud)\n其中--no-test-load标志(通常)有助于避免交叉编译的任何问题。动态库的构建(包括链接到 target-native )libxml2工作得很好。但是,在该步骤中包安装失败help:
R CMD INSTALL --no-test-load --build .\nRun Code Online (Sandbox Code Playgroud)\n显然,这会失败,因为它.dylib不是为主机架构编译的,所以我们不希望它是可加载的。问题是:为什么help安装步骤尝试加载共享库?如何避免这种情况?
我已经确认这确实是help触发此自加载的步骤。通过添加标志,包构建工作得很好--no-help。然而,这并不理想——最好向所有平台提供帮助手册。
尝试仅排除帮助的特定部分并不能避免自加载错误,即,每个--no-docs和--no-html标志仍然失败。
我怀疑 .Rd 文件(示例?)中的某些内容正在触发 R 尝试加载库。但是,我在使用 Roxygen2 生成的 .Rd 文件作为帮助文档的其他 R 包中没有遇到此问题。例如,nloptr(包装、原料 ) 交叉编译成功。任何有关寻找内容的见解将不胜感激。
有些包需要在构建文档时导入自身。对于 xml2,XML 选项从 R 包加载,然后注入到文档中。请参阅 https://github.com/r-lib/xml2/blob/ab2078976c9ab57116c7c9175632e7d19d45273f/man/read_xml.Rd#L58
要解决此问题,您必须编译该包两次。一种用于跨架构(Apple Silicon),一种用于本机架构(Intel),并使用本机包来构建文档,假设生成的文档对于两种架构都是相同的。conda-forge 中可能有一两个例子可以做到这一点。