On Sun, Jul 11, 2010 at 12:56 PM, Simon Urbanek <simon.urbanek@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

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.stack@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.stack@gmail.com



-- 
Conrad Stack
-----------------------
PSU Department of Biology
208 Mueller Lab
University Park, PA 16802
cell: 814.409.8310
email: conrad.stack@gmail.com

	[[alternative HTML version deleted]]

