Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用DLLs构建R包_R_Package - Fatal编程技术网

用DLLs构建R包

用DLLs构建R包,r,package,R,Package,我正在尝试创建一个二进制包,其中包含包运行所依赖的预编译.dll文件。我有一个文件tkogl2.dll,需要在使用包时加载该文件。创建包并尝试使用devtools::build(binary=TRUE)生成后,我收到以下错误: Error: package or namespace load failed for 'GUImorphTest' in library.dynam(lib, package, package.lib): DLL 'tkogl2.dll' not found:

我正在尝试创建一个二进制包,其中包含包运行所依赖的预编译
.dll
文件。我有一个文件
tkogl2.dll
,需要在使用包时加载该文件。创建包并尝试使用
devtools::build(binary=TRUE)
生成后,我收到以下错误:

 Error: package or namespace load failed for 'GUImorphTest' in library.dynam(lib, package, package.lib):
    DLL 'tkogl2.dll' not found: maybe not installed for this architecture?
   错误: 载入失败
   停止执行
   *** arch - x64
   Error: package or namespace load failed for 'GUImorphTest' in library.dynam(lib, package, package.lib):
    DLL 'tkogl2.dll' not found: maybe not installed for this architecture?
   错误: 载入失败
   停止执行
   ERROR: loading failed for 'i386', 'x64'
这很可能是由于
名称空间
文件造成的,尽管我是这个过程的新手,所以我不完全确定它应该包含什么。它目前只包含
useDynLib(tkogl2.dll)
,这是我在谷歌上找到的。它也可能是我在包中放置.dll的地方。我只是创建了一个libs文件夹,如下所示: 非常感谢您的帮助,谢谢

编辑: 这是空载fct

.onLoad <- function(libname, pkgname) {
    chname <- "tkogl2"
    file.ext <- .Platform$dynlib.ext #dll file
    dlname <- paste(chname, file.ext, sep = "")
    if (is.character(.Platform$r_arch) && .Platform$r_arch != "")
        path <- file.path("libs", .Platform$r_arc, dlname)
    else path <- file.path("libs", dlname)
    file <- system.file(path, package = pkgname, lib.loc = libname)[1] #grabs full file name
    print(file)
    tryCatch(tcl("load", file, "Tkogl2"),
             error = function(e)
             warning("loading tkogl2 failed", call. = FALSE))
}

.onLoad是否尝试使用完整路径?您不应该在名称中包含
.dll
,并编写自己的
install.libs.R
文件来安装它。请参阅“编写R扩展”。@duckmayr是的,我有一个.onLoad函数。我将共享它,包括Windows DLL。对于Windows,您必须具有文件夹
inst/libs/i386
inst/libs/x64
。您可以使用完整路径进行尝试吗?您不应该在名称中包含
.dll
,而应该编写自己的
install.libs.R
文件来安装它。请参阅“编写R扩展”。@duckmayr是的,我有一个.onLoad函数。我将共享它,包括Windows DLL。对于Windows,必须具有文件夹
inst/libs/i386
inst/libs/x64