Ich versuche, ein R-Modul mit Rcpp zu entwickeln. Denn es folgte ich ein (Dirk Eddelbuettel's guide)Fehler beim Erstellen eines Moduls mit Rcpp
Die Dateien meiner Bibliothek haben den Inhalt:
functions.hpp:
class myclass {
// my atributes and functions
}
functions.cpp:
#include <Rcpp.h>
using namespace Rcpp;
class myclass;
RCPP_EXPOSED_CLASS(myclass)
#include "functions.hpp"
//Implementation of my funcions
RCPP_MODULE(mymodule){
class_<myclass>("myclass")
.constructor()
.method("oneMethod", &myclass::oneMethod)
//more methods
;
}
mypackageExports.R:
.onLoad<-function(libname, pkgname){
require("methods")
loadRcppModules()
}
BESCHREIBUNG:
...
LazyLoad: yes
Depends: methods, Rcpp (>= 0.12.4)
LinkingTo: Rcpp
RcppModules: mymodule
listet
useDynLib(mypackage)
exportPattern("^[[:alpha:]]+")
import(Rcpp)
Wenn ich die Bibliothek mit dem R CMD INSTALL mypackage
Befehl kompilieren habe ich den Fehler:
installing to /home/user/R/x86_64-pc-linux-gnu-library/3.3/mypackage/libs
** R
** preparing package for lazy loading
** help
*** installing help indices
** building package indices
** testing if installed package can be loaded
*** caught segfault ***
address (nil), cause 'memory not mapped'
Traceback:
1: .Call(Module__classes_info, xp)
2: Module(m, pkg, mustStart = TRUE)
3: doTryCatch(return(expr), name, parentenv, handler)
4: tryCatchOne(expr, names, parentenv, handlers[[1L]])
5: tryCatchList(expr, classes, parentenv, handlers)
6: tryCatch({ mod <- Module(m, pkg, mustStart = TRUE) if (isTRUE(direct)) { populate(mod, ns) } else { forceAssignInNamespace(m, mod, ns) } assign(.moduleMetaName(m), mod, envir = ns)}, error = function(e) { stop(sprintf("failed to load module %s from package %s\n%s", m, pkg, conditionMessage(e)))})
7: loadRcppModules()
8: fun(libname, pkgname)
9: doTryCatch(return(expr), name, parentenv, handler)
10: tryCatchOne(expr, names, parentenv, handlers[[1L]])
11: tryCatchList(expr, classes, parentenv, handlers)
12: tryCatch(fun(libname, pkgname), error = identity)
13: runHook(".onLoad", env, package.lib, package)
14: loadNamespace(package, lib.loc)
15: doTryCatch(return(expr), name, parentenv, handler)
16: tryCatchOne(expr, names, parentenv, handlers[[1L]])
17: tryCatchList(expr, classes, parentenv, handlers)
18: tryCatch(expr, error = function(e) { call <- conditionCall(e) if (!is.null(call)) { if (identical(call[[1L]], quote(doTryCatch))) call <- sys.call(-4L) dcall <- deparse(call)[1L] prefix <- paste("Error in", dcall, ": ") LONG <- 75L msg <- conditionMessage(e) sm <- strsplit(msg, "\n")[[1L]] w <- 14L + nchar(dcall, type = "w") + nchar(sm[1L], type = "w") if (is.na(w)) w <- 14L + nchar(dcall, type = "b") + nchar(sm[1L], type = "b") if (w > LONG) prefix <- paste0(prefix, "\n ") } else prefix <- "Error : " msg <- paste0(prefix, conditionMessage(e), "\n") .Internal(seterrmessage(msg[1L])) if (!silent && identical(getOption("show.error.messages"), TRUE)) { cat(msg, file = stderr()) .Internal(printDeferredWarnings()) } invisible(structure(msg, class = "try-error", condition = e))})
19: try({ attr(package, "LibPath") <- which.lib.loc ns <- loadNamespace(package, lib.loc) env <- attachNamespace(ns, pos = pos, deps)})
20: library(pkg_name, lib.loc = lib, character.only = TRUE, logical.return = TRUE)
21: withCallingHandlers(expr, packageStartupMessage = function(c) invokeRestart("muffleMessage"))
22: suppressPackageStartupMessages(library(pkg_name, lib.loc = lib, character.only = TRUE, logical.return = TRUE))
23: doTryCatch(return(expr), name, parentenv, handler)
24: tryCatchOne(expr, names, parentenv, handlers[[1L]])
25: tryCatchList(expr, classes, parentenv, handlers)
26: tryCatch(expr, error = function(e) { call <- conditionCall(e) if (!is.null(call)) { if (identical(call[[1L]], quote(doTryCatch))) call <- sys.call(-4L) dcall <- deparse(call)[1L] prefix <- paste("Error in", dcall, ": ") LONG <- 75L msg <- conditionMessage(e) sm <- strsplit(msg, "\n")[[1L]] w <- 14L + nchar(dcall, type = "w") + nchar(sm[1L], type = "w") if (is.na(w)) w <- 14L + nchar(dcall, type = "b") + nchar(sm[1L], type = "b") if (w > LONG) prefix <- paste0(prefix, "\n ") } else prefix <- "Error : " msg <- paste0(prefix, conditionMessage(e), "\n") .Internal(seterrmessage(msg[1L])) if (!silent && identical(getOption("show.error.messages"), TRUE)) { cat(msg, file = stderr()) .Internal(printDeferredWarnings()) } invisible(structure(msg, class = "try-error", condition = e))})
27: try(suppressPackageStartupMessages(library(pkg_name, lib.loc = lib, character.only = TRUE, logical.return = TRUE)))
28: tools:::.test_load_package("mypackage", "/home/user/R/x86_64-pc-linux-gnu-library/3.3")
An irrecoverable exception occurred. R is aborting now ...
Segmentation fault (core dumped)
ERROR: loading failed
Kann jemand (@DirkEddelbuettel , mein Rcpps Guru) erzähle was ich gerade mache wro ng?
Datei, die Sie diese Frage an die Mailing-Liste wahrscheinlich zu senden, wenn Sie möchten, Dirks Aufmerksamkeit, afaik, ist er am besten geeignet, auf direkte Fragen am vorgesehenen Ort dafür zu reagieren. – shayaa
Sorry, weil ich keine Mailingliste benutzt habe, aber die Antwort wäre öffentlich?Ich werde es tun, wenn jemand mir nicht helfen kann, aber fragen hier ist die Antwort öffentlich und es könnte für andere nützlich sein –
Alle Postings sind verfügbar, sie werden nur an Abonnenten verschickt. Jeder kann deine Beiträge lesen und die Antworten sind öffentlich. – shayaa