首页 > 解决方案 > 使用 DLL 构建 R 包

问题描述

我正在尝试创建一个二进制包,其中包含.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'

这很可能是由于NAMESPACE文件,虽然我是这个过程的新手,所以我不完全确定它应该包含什么。它目前只包含useDynLib(tkogl2.dll)我通过谷歌搜索找到的内容。它也可能是我将 .dll 放入包中的位置。我只是创建了一个 libs 文件夹,如下所示:在此处输入图像描述 感谢任何帮助,谢谢!

编辑:这里是 onload 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))
}

标签: rpackage

解决方案


推荐阅读