<div dir="ltr"><div class="gmail_extra">Hi,<br><br></div><div class="gmail_extra">thanks for all these explanations!<br><br></div><div class="gmail_extra"><div class="gmail_quote">I believe some clarifications from my side as well may be useful. I also have possibly silly questions :)<br>
</div><div class="gmail_quote">Building RcppOctave involves 2 separate compilation/linking:<br><br></div><div class="gmail_quote">  * Octave modules that call R RNG functions, but -- currently -- do not use Rcpp at all: these are built using mkoctfile, adding R flags  to the compilation command (-L"path/to/R" and -lR). Modules are compiled using Octave as a shared library. I think that, as long as the Octave dll issue is solved, Octave knows how to load these modules, without having to change the PATH. They load correctly on my Windows installation, but it is the machine on which the package was built, so this might also hide path issues.<br>
</div><div class="gmail_quote">  * the RcppOctave's package library, which defines Rcpp wrap and as templates to convert and pass data between R an Octave: it is built by R compiler, adding Rcpp flags (as recommended and defined by Rcpp.package.skeleton) and Octave flags (-L"patth/to/octave/libraries" and -loctinterp -loctave -lcruft)<br>
<br></div><div class="gmail_quote">The path to all Octave stuff are determined at configure time just before compiling.<br></div><div class="gmail_quote">So, I believe this is all fine when installing on Linux, since compilation occurs at that time.<br>
</div><div class="gmail_quote">On Windows, however, both the modules and the package's library are compiled when building the binary package.<br><br></div><div class="gmail_quote">If I understand static linking correctly, packages that link against Rcpp using  Rcpp:::LdFlags() will include in their library the definition of the Rcpp functions they use, making them standalone, right? or will the complete Rcpp dll be included?<br>
</div><div class="gmail_quote">In this case I don't see why Rcpp.dll is needed in the PATH at all.<br></div><div class="gmail_quote"><br><br></div><div class="gmail_quote">I don't think I linking RcppOctave against Octave statically is ideal:<br>
</div><div class="gmail_quote">1. I only call a few Octave functions, meaning that all other functions that a user may need will not be included in the library, and we get back to the starting point of dll loading issue.<br>
</div><div class="gmail_quote">2. there is no point in including all Octave in RcppOctave<br></div><div class="gmail_quote">3. Most Windows users will only have Octave dll, and no static libraries unless they compile them themselves. Am I right on this one: dll and static libraries are different objects that can't be used on of another?<br>
</div><div class="gmail_quote"><br></div><div class="gmail_quote">Possible solution:<br>I could manually load the RcppOctave library in .onLoad (instead of the useDyn directive in NAEMASPACE), after adding the required directories to the PATH. These can be discovered using octave-config, which ships with all Octave installation.<br>
</div><div class="gmail_quote">I will try this, re-build and update the package in both github and myCRAN repo, so that they can be tested.<br></div><div class="gmail_quote"><br><br></div><div class="gmail_quote">Renaud<br>
</div><br></div></div>