<div dir="ltr"><div>Apple is changing the plumbing (moving to LLVM/clang from gcc/g++), and while these compilers are<br></div><div>largely compatible, there can be binary inconsistencies. In general, different compiler versions (even<br>
of the same compiler) may create binaries that will not work together, esp. when you consider<br>exception processing or foreign function interfaces. There is no standard for how FFI's should work.<br></div></div><div class="gmail_extra">
<br><br><div class="gmail_quote">On Fri, Nov 1, 2013 at 10:17 AM, Renaud Gaujoux <span dir="ltr"><<a href="mailto:renaud@mancala.cbio.uct.ac.za" target="_blank">renaud@mancala.cbio.uct.ac.za</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir="ltr"><div><div>You were initially suggesting that if R is compiled using a compiler different than Octave then one might end up having troubles.<br></div>Would this still be an issue if one follows the procedure you described?<br>

</div><br>Generally speaking (and this is for my curiosity), does this mean that libraries generated by one compiler cannot necessarily be linked with another program using another compiler. I had hoped the interface would be platform-dependent only, but not compiler dependent, with compilers needing to follow some standard specs of a given platform.<br>

<br></div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><br><div class="gmail_quote">On 1 November 2013 16:07, Dominick Samperi <span dir="ltr"><<a href="mailto:djsamperi@gmail.com" target="_blank">djsamperi@gmail.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>Well, I convinced myself (I could be wrong) that the problem is not related to R or Rcpp,<br></div>

<div>and I did not test RcppOctave. As you suggest, termination protocol may need to be<br></div><div>tested...<br>
</div></div><div><div><div class="gmail_extra"><br><br><div class="gmail_quote">On Fri, Nov 1, 2013 at 4:11 AM, Renaud Gaujoux <span dir="ltr"><<a href="mailto:renaud@mancala.cbio.uct.ac.za" target="_blank">renaud@mancala.cbio.uct.ac.za</a>></span> wrote:<br>


<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>What type of R installation did you test this procedure with?<br></div>Ideally this would work with the plain CRAN binary, modulo adapting ~/.R/Makevars.<br>


<div><div><br><br><div class="gmail_extra"><div class="gmail_quote"><div>

<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div><div>As you probably know, the last line of embedded.cc (attached)</div><div>is very important. Without it there is still a memory error!</div>




<div><br></div></div></div><br></blockquote><div><br></div></div><div>I checked Octave source and clean_up_and_exit is a simple wrapper to do_octave_atexit, which I call directly to skip the call to exit, which would otherwise terminate the R session as well:<br>



<br></div><div>[from <a href="http://hg.savannah.gnu.org/hgweb/octave/file/eff3d78367f0/src/toplev.cc#l667" target="_blank">http://hg.savannah.gnu.org/hgweb/octave/file/eff3d78367f0/src/toplev.cc#l667</a>]<br><br></div><div>


void clean_up_and_exit (int retval)<br>
{<br>  do_octave_atexit ();<br>  if (octave_exit)<br>    (*octave_exit) (retval == EOF ? 0 : retval);<br>}<br><br></div><div>Note that I actually don't know how to effectively terminate the Octave session. Don't know if this even possible since it currently runs in the same thread as R (that's at least my understanding). So even after cleaning up with do_octave_atexit(), we can still send commands to Octave which responds fine, except if errors occurs and then a segfault sometimes come up suggesting some thing is in a bad state. Anyway, this is not really a big issue.<br>



<br></div><div>library(RcppOctave)<br></div><div>o_runif(1)<br></div><div>octave_end()<br></div><div>o_runif(1)<br></div><br><div><br></div></div></div></div></div></div>
</blockquote></div><br></div>


</div></div></blockquote></div><br></div>
</div></div></blockquote></div><br></div>