[Rcpp-devel] Linking problem when wrapping a armadillo-based C++ library in a R package using RcppArmadillo

julien chiquet julien.chiquet at gmail.com
Wed Jul 25 21:12:24 CEST 2018


Great ! And no hurry.

Best,
j



Julien Chiquet
http://julien.cremeriefamily.info
mel: julien.chiquet at inra.fr
tel: +33(0)1 44 08 16 73



On Wed, Jul 25, 2018 at 7:12 PM Keith O'Hara <kth.ohr at gmail.com> wrote:

> I’m traveling without my laptop this week. I’ll take a look at the error
> when I return.
>
> Best,
> Keith
>
> On Jul 25, 2018, at 12:26 PM, julien chiquet <julien.chiquet at gmail.com>
> wrote:
>
> On Wed, Jul 25, 2018 at 5:57 PM Dirk Eddelbuettel <edd at debian.org> wrote:
>
>>
>> On 25 July 2018 at 17:30, julien chiquet wrote:
>> | Hi,
>> |
>> | I am trying to wrap the optim library (https://github.com/kthohr/optim)
>> in
>> | R via an R package using Rcpp/RcppArmadillo. Indeed, optim relies on
>> | armadillo itself. The github repository can be found here
>> | https://github.com/jchiquet/optimLibR
>> |
>> | To do that, I put the headers of optim into inst/include/ and the cpp
>> files
>> | into src/. Then I tried to "heuristically" pull everything together in
>> the
>> | src/Makevars files, after my (obviously poor) understanding of the R
>> manual
>> | pages about Makevars and from the various examples that I copied from
>> the
>> | web (especially from the RcppMLPACK1 which, relies on the C++ library
>> | MLPACK, itself based on armadillo
>> | https://github.com/rcppmlpack/RcppMLPACK1/blob/master/src/Makevars).
>> |
>> | The package installation (including compilation of optim) successes (at
>> | least, the package can be installed). Then I tried to create two small
>> Rcpp
>> | functions for two examples available in the original optim library,
>> | starting with the following lines
>> |
>> | // [[Rcpp::depends(RcppArmadillo)]]// [[Rcpp::plugins(cpp11)]]
>> | #define USE_RCPP_ARMADILLO
>> | #include "optim.hpp"
>> |
>> | (The #define command is an option of the optim library.)
>> |
>> | However, when I call the corresponding R functions, I get the following
>> | Armadillo errors in R which I do not have when running them in 'pure'
>> C++
>> | (I am pretty sure it is not a syntax problem, the Rcpp code and the
>> | original C++ code are hopefully identical, except for the headers).
>> |
>> | > library(optimLibR)> ackley_function()error: arma::memory::acquire():
>> out of memory
>> |
>> | > library(optimLibR)> logit_optimLib()error: Mat::init(): requested
>> size is not compatible with column vector layout
>> |
>> | So it seems to me that the header of armadillo are correctly defined
>> but I
>> | am not sure that I reach the src (cpp) part of armadillo which is
>> required
>> | at the execution.
>> |
>> | If anyone can confirm or help pointing the origin of the error, I would
>> be
>> | debtful...
>> |
>> | Thanks for your time,
>>
>> Good news / bad news. I think the good news is that everything builds, so
>> you
>> have no linking issue. In fact, no RcppArmadillo package links to
>> Armadillo
>> as we do everything via the headers.
>>
>> But you seem to have run-time issues which _could_ stem from the fact that
>> RcppArmadillo sets a bunch of #define variables and your use may be
>> slightly
>> different / conflict with these. Maybe you can check with Keith about how
>> his optim(lib) could / should be called from R.
>>
>
> Thanks for your prompt and helpful answer. At least I know I do not have
> to struggle with the Makevars.
>
> I'll check with Keith.
>
> j
>
>
>> Dirk
>>
>> --
>> http://dirk.eddelbuettel.com | @eddelbuettel | edd at debian.org
>>
> _______________________________________________
> Rcpp-devel mailing list
> Rcpp-devel at lists.r-forge.r-project.org
> https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.r-forge.r-project.org/pipermail/rcpp-devel/attachments/20180725/85e0883e/attachment.html>


More information about the Rcpp-devel mailing list