On Tue, Jul 13, 2010 at 3:01 PM, Simon Urbanek <simon.urba...@r-project.org>wrote:
> Thanks, Conrad, > > finally, I can give you some more targeted suggestions. I'll cover several > issues (those will bite you later), not just the one that breaks. > > a) configure > You have the order of check switched - you're first checking for the > compiler (AC_LANG etc.) and only then setting the right one from R. The > order should be reversed since you first need to find the compiler and only > then check it. > Ahh, thanks - I'm still new to autotools. > b) Brownie makefile > The one is really hard-wired so it won't work since you have flags like > -m32 in there so you end up with things like g++ -arch x86_64 -m32 .. which > cannot work. Also compilation should not include $(LNK_OPTIONS) [you don't > need them at all since you're not linking anything anyway]. In fact it would > be much better to just take the flags from R since you are also missing PIC > flags and they will be needed: although you are compiling a static library > it will be linked into a dynamic object so it has to be PIC. > Great suggestion - I've been looking into using variables gleaned from R CMD config instead of hardcoding it into the Brownie makefilestatic, that is what you meant correct? > > c) Now, the real meat is in the linker flags in RBrownie - and the compiler > actually tells you what the mistake is: > > ld: warning: path './brownie_src/libBrownie.a' following -L not a directory > > You didn't really mean to sdd the libBrownie.a directory to be the search > path - you really meant to use the library so your configure should read > > AC_SUBST([LDFLAGS],["brownie_src/libBrownie.a ${LIBS} ${RCPP_LIB} "]) > > ... and with that it works. > Thanks, I did make that change and got rid of the 'symbol not found' error. After that though, I was back to getting the "Bus error: non-existent memory address 0x0 ..." during the dyn.load call. After much painful trial and error (and re-installing Rcpp), I figured out that if I used the linker flag: -nostdlib, during the shared library building step that the R package worked fine. I originally tried this because I thought the macports and standard mac osx libraries might not be compatible with each other, but I'm not fully sure why it worked. Any thoughts would be great. Thanks! Conrad > > Cheers, > Simon > > > On Jul 13, 2010, at 2:05 PM, Conrad Stack wrote: > > > Ah, sorry about that. I'm working off of this branch: > > > > svn checkout http://brownie.googlecode.com/svn/branches/brownie_jcs > > brownieTEST > > > > cd brownieTEST > > chmod +x build_r > > ./build_r > > > > That should start the build. > > > > Thanks! > > Conrad > > > > > > On Mon, Jul 12, 2010 at 3:58 PM, Simon Urbanek < > simon.urba...@r-project.org> wrote: > > 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 > > > > > > > > > > > > > > > > > > -- > > 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