Conrad, On Jul 12, 2010, at 4:57 PM, Conrad Stack wrote:
> On Sun, Jul 11, 2010 at 12:56 PM, Simon Urbanek <simon.urba...@r-project.org >> wrote: > >> >> On Jul 10, 2010, at 4:55 PM, Conrad Stack wrote: >> >>> Hello fellows, >>> >>> I'm currently developing an R package and having some trouble getting it >> to >>> install on Mac OS (the build process works fine on Windows 7 and Ubuntu >> 10). >>> The little prototype that I'm trying to get working compiles a large >> amount >>> of C++ code which is connected to R via Rcpp (0.8.2). The C++ is >> compiled >>> using autoconfig scripts into a static library which is used in Makevars >> (in >>> the src directory). Here is the relevant Makevars line (where libBrownie >> is >>> the static library just compiled): >>> >>> PKG_LIBS=-s -L. -L./brownie_src -lBrownie -lR -lgsl -lgslcblas -lm >>>> /opt/local/lib/R/library/Rcpp/lib/libRcpp.a >>> >> >> That sounds like a lot of trouble in itself (you should not include any R >> flags since that can break and -lR is not what's used on OS X; -s it bad as >> well and static libraries are better linked using their name since they have >> lower priority in -l). But it could be really anything including bugs in >> your package, so without the actual package I fear we can't help you much. >> >> > Thanks Simon, linking the static library using it's name directly and > removing the -lR and -s flags fixed the bus error. Unfortunately, I'm now > getting another error when the package tries to load: > > Error in dyn.load("RBrownie.so") : > > unable to load shared library >> '/Users/conrad/brownie/RBrownie/src/RBrownie.so': > > dlopen(/Users/conrad/brownie/RBrownie/src/RBrownie.so, 6): Symbol not >> found: __ZTV16NewickTreeWriter > > Referenced from: /Users/conrad/brownie/RBrownie/src/RBrownie.so > > Expected in: dynamic lookup > > > Where that function is from the static library (libBrownie.a) which was not > being linked properly from before. I think this is a fairly standard C++ > error, but any help would be appreciated. I do know enough to run these > commands: > (from the static library) > nm libBrownie.a | grep __ZTV16NewickTreeWriter: > U __ZTV16NewickTreeWriter > 0000f7a0 S __ZTV16NewickTreeWriter > > (from the shared library which R builds): > nm libBrownie.a | grep __ZTV16NewickTreeWriter > U __ZTV16NewickTreeWriter > Unfortunately http://code.google.com/p/brownie/source/checkout doesn't even compile so I don't think we can help you any further. From experience I would still bet on the package flags being wrong (it's a bit tedious to debug since symbols are only resolved at load time, not at link time) but we can't tell without the package. Cheers, Simon > Thanks! > > >>> This step seems to work fine and if I run the ./configure script which is >> generated from the autoconfig file, >> >> More trouble - you should never run configure by hand because it will >> likely use wrong settings (unless it is written such that it attempts to >> find R and run it to get flags) - R CMD INSTALL is what you need to use so >> the correct architecture, compilers and flags are setup. >> > > Yes, my config script uses R to supply the flags, so running configure seems > to run okay.... > > >> >> Cheers, >> Simon >> >> >> > > >> >>> the library builds properly on Mac OS. >>> The problem manifests when installing the package: >>> >>> ** testing if installed package can be loaded >>> >>> >>>> *** caught bus error *** >>> >>> address 0x0, cause 'non-existent physical address' >>> >>> >>> Traceback: >>> >>> 1: dyn.load(file, DLLpath = DLLpath, ...) >>> >>> 2: library.dynam(lib, package, package.lib) >>> >>> 3: loadNamespace(package, c(which.lib.loc, lib.loc), keep.source = >>> keep.source) >>> >>> 4: doTryCatch(return(expr), name, parentenv, handler) >>> >>> 5: tryCatchOne(expr, names, parentenv, handlers[[1L]]) >>> >>> 6: tryCatchList(expr, classes, parentenv, handlers) >>> >>> 7: 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 <- paste(prefix, "\n >>> ", sep = "") } else prefix <- "Error : " msg <- paste(prefix, >>> conditionMessage(e), "\n", sep = "") .Internal(seterrmessage(msg[1L])) >>> if (!silent && identical(getOption("show.error.messages"), TRUE)) >> { >>> cat(msg, file = stderr()) .Internal(printDeferredWarnings()) >>> } invisible(structure(msg, class = "try-error"))}) >>> >>> 8: try({ ns <- loadNamespace(package, c(which.lib.loc, lib.loc), >>> keep.source = keep.source) dataPath <- file.path(which.lib.loc, >> package, >>> "data") env <- attachNamespace(ns, pos = pos, dataPath = dataPath, >>> deps)}) >>> >>> 9: library(pkg_name, lib.loc = lib, character.only = TRUE, logical.return >> = >>> TRUE) >>> >>> 10: withCallingHandlers(expr, packageStartupMessage = function(c) >>> invokeRestart("muffleMessage")) >>> >>> 11: suppressPackageStartupMessages(library(pkg_name, lib.loc = lib, >>> character.only = TRUE, logical.return = TRUE)) >>> >>> 12: doTryCatch(return(expr), name, parentenv, handler) >>> >>> 13: tryCatchOne(expr, names, parentenv, handlers[[1L]]) >>> >>> 14: tryCatchList(expr, classes, parentenv, handlers) >>> >>> 15: 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 <- paste(prefix, "\n >>> ", sep = "") } else prefix <- "Error : " msg <- paste(prefix, >>> conditionMessage(e), "\n", sep = "") .Internal(seterrmessage(msg[1L])) >>> if (!silent && identical(getOption("show.error.messages"), TRUE)) >> { >>> cat(msg, file = stderr()) .Internal(printDeferredWarnings()) >>> } invisible(structure(msg, class = "try-error"))}) >>> >>> 16: try(suppressPackageStartupMessages(library(pkg_name, lib.loc = lib, >>> character.only = TRUE, logical.return = TRUE))) >>> >>> 17: do_install_source(pkg_name, instdir, pkg, desc) >>> >>> 18: do_install(pkg) >>> >>> 19: tools:::.install_packages() >>> >>> aborting ... >>> >>> /opt/local/lib/R/bin/INSTALL: line 34: 1357 Done echo >>> 'tools:::.install_packages()' >>> >>> 1358 Bus error | R_DEFAULT_PACKAGES= LC_COLLATE=C >>> "${R_HOME}/bin/R" $myArgs --slave --args ${args} >>> >>> I'm not really familiar with Mac OS at all so any direction would be >> great. >>> Thanks! >>> Conrad >>> >>> -- >>> Conrad Stack >>> ----------------------- >>> PSU Department of Biology >>> 208 Mueller Lab >>> University Park, PA 16802 >>> cell: 814.409.8310 >>> email: conrad.st...@gmail.com >>> >>> [[alternative HTML version deleted]] >>> >>> _______________________________________________ >>> R-SIG-Mac mailing list >>> R-SIG-Mac@stat.math.ethz.ch >>> https://stat.ethz.ch/mailman/listinfo/r-sig-mac >>> >>> >> >> >> > > > -- > Conrad Stack > ----------------------- > PSU Department of Biology > 208 Mueller Lab > University Park, PA 16802 > cell: 814.409.8310 > email: conrad.st...@gmail.com > > > > -- > Conrad Stack > ----------------------- > PSU Department of Biology > 208 Mueller Lab > University Park, PA 16802 > cell: 814.409.8310 > email: conrad.st...@gmail.com > > [[alternative HTML version deleted]] > > _______________________________________________ > R-SIG-Mac mailing list > R-SIG-Mac@stat.math.ethz.ch > https://stat.ethz.ch/mailman/listinfo/r-sig-mac > > _______________________________________________ R-SIG-Mac mailing list R-SIG-Mac@stat.math.ethz.ch https://stat.ethz.ch/mailman/listinfo/r-sig-mac