用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
。