It appears that there is some conflict between Rcpp and Octave under Mac OS X that doesn't depend on the design of RcppOctave. Just drop the files strtest.cpp and Makevars (attached) into Rcpp/src and run R CMD INSTALL Rcpp. This leads to a memory error. The file strtest.cpp was stripped out of rcpp_octave.cpp, but it does not use RcppOctave or Rcpp (it is just a trivial Octave client).
Since the problem is OS-dependent, it might have something do to with static initializers in the Octave string_vector class, or perhaps there is a MacOS-specific conflict with std::string. On Wed, Oct 9, 2013 at 4:21 AM, Renaud Gaujoux < ren...@mancala.cbio.uct.ac.za> wrote: > You are a resourceful person Dominick! :D > I was not thinking in going Mac for now, because I can't test anything, > but it will be great if we manage our way through it as well. > > 1. In src/modules/Makefile.in, the '-F' flag (for framework) is not >> recognized by mkoctfile, so I added this temporary work-around: >> >> #R_LDFLAGS = @R_LDFLAGS@ >> R_LDFLAGS = -L/Library/Frameworks/R.framework/Libraries -lR >> > > One can probably test for Mac in configure.in and tweak the R_LDFLAGS for > this platform only. > >> >> 2. Parsing the man files o_whatever.Rd fails (attempt to >> free an unallocated pointer), so I removed all of these >> man pages for now (the failure occurs in >> <R>/src/library/tools/R/Rd.R, function .build_Rd_db(), >> where .fetch_Rd_object is applied to each Rd file). >> > > The o_*.Rd files document more R-friendly wrappers to octave functions. > They contain \Sexp statements that retrieve Octave help files of the > associated function via RcppOctave o_help function: > > \Sexpr[results=rd,stage=render]{RcppOctave::o_help(<octave_function_name>, > format='rd')} > > For packages that contain such expressions in man pages, R CMD build also > generate the manual pdf, by installing the package in a temp directory and > evaluating the code in all \Sexpr statements. On Windows, R CMD INSTALL > --build also renders the man pages. > So the issue will probably solves away when the package loads properly. > > For quick testing compilation and load on Windows, I run R CMD INSTALL > directly on the package source directory with flag --no-help. To ensure a > fresh compilation at each run I use --preclean which runs the cleanup > script, and removes everything, including the .o, .so, .dll, .oct files: > > # mkdir libtest > R --vanilla CMD INSTALL -l libtest --no-help --preclean pkg_src_directory > > >> 3. With these changes the build gets to the point where >> the install process checks if the package can be >> loaded, and fails with: >> >> ** testing if installed package can be loaded >> sh: line 1: 55395 Abort trap: 6 >> '/Library/Frameworks/R.framework/Resources/bin/R' --no-save --slave 2>&1 < >> '/var/folders/fq/2th4vc9n1mq9cxv5nl9bmzkc0000gn/T//RtmpbjkEA7/filed5d471d0dd21' >> R(55395) malloc: *** error for object 0x7fff7684d570: pointer being freed >> was not allocated >> *** set a breakpoint in malloc_error_break to debug >> ERROR: loading failed >> * removing ‘/Users/dsamperi/Library/R/3.0/library/RcppOctave’ >> * restoring previous ‘/Users/dsamperi/Library/R/3.0/library/RcppOctave’ >> >> 4. If I ignore this and try to run library(RcppOctave) in R I get: >> >> > library(RcppOctave) >> Loading required package: Rcpp >> Loading required package: pkgmaker >> Loading required package: registry >> R(55403) malloc: *** error for object 0x7fff7684d570: pointer being freed >> was not allocated >> *** set a breakpoint in malloc_error_break to debug >> Abort trap: 6 >> >> 5. Setting the breakpoint as instructed was not very helpful >> as the malloc code does not have symbols and cannot be >> traced. >> >> > I will double check for bad allocations in the code, but will > unfortunately be limited in my ability to debug this. > > Renaud > >
Makevars
Description: Binary data
#include <octave/oct.h> #include <octave/octave.h> #include <octave/config.h> #include <octave/input.h> #include <octave/pt-all.h> #include <octave/symtab.h> #include <octave/parse.h> #include <octave/unwind-prot.h> #include <octave/toplev.h> #include <octave/error.h> #include <octave/quit.h> #include <octave/variables.h> #include <octave/sighandlers.h> #include <octave/sysdep.h> #include <octave/str-vec.h> void strtest() { int narg = 4; string_vector argv(narg); argv(0) = "Roctave"; argv(1) = "--quiet"; argv(2) = "--no-line-editing"; argv(3) = "--no-history"; }
_______________________________________________ Rcpp-devel mailing list Rcpp-devel@lists.r-forge.r-project.org https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel