You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编译文件名含空格的C文件以在R中生成动态库?

解决R编译含空格的C文件生成动态库问题

当C文件名包含空格时,直接用system2('R', c('CMD', 'SHLIB', 'Essai 1.c'))会报错,核心原因是system2会将带空格的文件名拆分为两个独立参数传递给R CMD SHLIB,导致命令误把Essai和1.c当作两个不同文件处理。

正确处理方案

使用shQuote()函数包裹带空格的文件名,确保它被识别为单个完整参数:

N.Nodes <- 145
# 用shQuote处理带空格的C文件名,避免参数拆分
system2('R', c('CMD', 'SHLIB', shQuote('Essai 1.c')))
# 加载动态库时同样处理带空格的文件名
dyn.load(shQuote("Essai 1.dll"))

add <- function(x, y){
    return(.Call("add", as.double(x), as.double(y)))
}
N.Nodes
add(1, pi)
N.Nodes

dyn.unload(shQuote("Essai 1.dll"))

原理说明

shQuote()会根据当前操作系统自动添加适配的引号(Windows用双引号,类Unix系统用单引号),强制命令行将带空格的文件名解析为单个完整路径,彻底避免参数拆分错误。

验证步骤

  1. 确保Essai 1.c文件与R脚本在同一目录下
  2. 运行修正后的脚本,编译过程无报错,且能正常调用C函数、修改全局变量N.Nodes

内容的提问来源于stack exchange,提问作者Olivier7121

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 06:54:59