[Rcpp-devel] RcppArmadillo error
Romain Francois
romain at r-enthusiasts.com
Tue Mar 30 16:12:33 CEST 2010
Le 30/03/10 15:36, Douglas Bates a écrit :
> On Tue, Mar 30, 2010 at 1:15 AM, Romain Francois
> <romain at r-enthusiasts.com> wrote:
>> Hi,
>
>> If you want to compile the code that is here
>> http://dirk.eddelbuettel.com/code/rcpp.armadillo.html directly from R
>> CMD SHLIB, you can do this:
>
>> romain at naxos /tmp $ export PKG_CXXFLAGS=`Rscript -e
>> "RcppArmadillo:::CxxFlags()"`
>> romain at naxos /tmp $ export PKG_LIBS=`Rscript -e "RcppArmadillo:::LdFlags()"`
>> romain at naxos /tmp $ R CMD SHLIB armaex.cpp
>
> The way that RcppArmadillo:::LdFlags() is currently defined there is a
> possibility of getting different Lapack and BLAS libraries when using
> R or calls to RcppArmadillo. R uses the libraries defined by the
> macros LAPACK_LIBS, BLAS_LIBS and FLIBS in the file
>
> file.path(R.home("etc"), "Makeconf") # evaluate this in R
>
> It is not certain that those will be the same as the libraries used by
> Armadillo. If they are not shared objects you run the risk of getting
> two copies of Lapack, etc. and possibly different BLAS, leading to
> different performance characteristics and perhaps different results.
Hmmm. Interesting. I did not think of that problem.
On my machine, I have :
Rscript -e "RcppArmadillo:::LdFlags()"
/Library/Frameworks/R.framework/Resources/library/Rcpp/lib/x86_64/libRcpp.a
-L/usr/lib -larmadillo
so linking against Rcpp "user" library and armadillo... but when I
manually set PKG_LIBS to just Rcpp user library, it still works, so we
actually do not need to link against armadillo library. armadillo itself
does not __need__ to get compiled into a library because it is all
templates.
>> I would however strongly recommend you to have this in a package.
>>
>> Romain
>>
>> Le 26/03/10 19:00, Abhisek a écrit :
>>> Hi Dirk,
>>>
>>> I was referring to this page:
>>> http://dirk.eddelbuettel.com/code/rcpp.armadillo.html
>>> i was trying to run the code there.
>>>
>>> here is my understanding so far (im new to linux and c++ so i apologize
>>> for seeming rather slow!):
>>> 1. The Rcpp package helps C++ and R recognize each others stuff (like
>>> variables).
>>>
>>> 2. The RcppArmadillo package extends this functionality to objects used
>>> in armadillo (such as matrices and vectors e.g. colvec).
>>>
>>> 3. In FastLM, armadillo is being included but not RcppArmadillo. but
>>> that is ok because there is a loop in there which converts an vector as
>>> defined in armadillo to one which Rcpp recognizes. And it is this
>>> vector which which gets passed back to R through the Rcpp interface.
>>> also, it uses cfunction which is different from what im doing here as i
>>> think you mentioned earlier (it worked by the way!)
>>>
>>> what i tried to do was as follows:
>>> a) to run the code as in the link above and include Rcpp and
>>> RcppArmadillo and I was getting the errors as described in my initial post.
>>> b) then i tried the same code but only including Rcpp and armadillo.
>>>
>>> if my reasoning above is correct, part (b) should not run as Rcpp would
>>> not recognize stuff like arma::colvec. but, i get the exact same error
>>> as above!
>>>
>>> so that suggests, that while compiling the code, the compiler is not
>>> even getting to the point in procedure b when it should encounters an
>>> type it doesnt recognize. which means that somehow, armadillo is giving
>>> problems. but that is as far as i can understand. either that or my
>>> understanding is way off.
>>>
>>> appreciate your patience and help!
>>> abhisek
>>>
>>>
>>>
>>> On Fri, Mar 26, 2010 at 4:20 PM, Dirk Eddelbuettel<edd at debian.org
>>> <mailto:edd at debian.org>> wrote:
>>>
>>>
>>> On 26 March 2010 at 15:32, Abhisek wrote:
>>> | Hi Dirk,
>>> |
>>> | Just so that I understand. I copied the code in the RcppArmadillo
>>> section
>>> | on your website and pasted and saved it.
>>>
>>> What code? What page?
>>>
>>> | Are you saying I should change
>>> | #include<RcppArmadillo> to #include<Rcpp> and #include<armadillo> ?
>>>
>>> No that is not what I said. I said
>>>
>>> You can't just look at FastLM() and think your code will run
>>> like it.
>>> RcppArmadillo __does not export its classes__. It is an
>>> implementation
>>> reference -- it gives you guidance as to how to implement C++
>>> packages of
>>> your own against other libraries.
>>>
>>> If you "just" want to use Armadillo and have Rcpp help you, look
>>> at the
>>> installed example 'FastLM' in the Rcpp package. In other words
>>> ignore
>>> RcppArmadillo for now.
>>>
>>> So look at /usr/local/lib/Rcpp/examples/FastLM/ and the files there.
>>> Run
>>>
>>> fastLMviaArmadillo.r
>>>
>>> and look at it. That should work.
>>>
>>> You can also look at the _entire RcppArmadillo package_ and see how the
>>> pieces fit together, including src/Makevars.
>>>
>>> But don't just take semi-random shortcuts and expect that to work. If we
>>> could make it any simpler, we would. There is a reason RcppArmadilli is
>>> package and not just a file.
>>>
>>> Dirk
>>>
>>> | best,
>>> | abhisek
>>> |
>>> | On Fri, Mar 26, 2010 at 1:40 PM, Dirk Eddelbuettel<edd at debian.org
>>> <mailto:edd at debian.org>> wrote:
>>> |
>>> |>
>>> |> Hi Abhisek,
>>> |>
>>> |> On 26 March 2010 at 12:28, Abhisek wrote:
>>> |> | I downloaded the stuff just last friday so it should be the latest
>>> |> version
>>> |> | of Rcpp as well as Armadillo. I used install.packages() for
>>> Rcpp and
>>> |> | RcppArmadillo. Armadillo is 0.9.4. Im using xubuntu karmic
>>> koala.
>>> |>
>>> |> Ok, that is all good. And if RcppArmadillo installed you have
>>> proper
>>> |> libraries, Armadillo included.
>>> |>
>>> |> I think part of your problem is a misunderstanding of an issue
>>> we may not
>>> |> have made particularly clear: You can't just look at FastLM()
>>> and think
>>> |> your code will run like it. RcppArmadillo __does not export its
>>> classes__.
>>> |> It is an implementation reference -- it gives you guidance as to
>>> how to
>>> |> implement C++ packages of your own against other libraries.
>>> |>
>>> |> If you "just" want to use Armadillo and have Rcpp help you, look
>>> at the
>>> |> installed example 'FastLM' in the Rcpp package. In other words
>>> ignore
>>> |> RcppArmadillo for now.
>>> |>
>>> |> The example (in 0.7.10) uses an idiom we no longer like and I am
>>> about to
>>> |> change that for an upcoming 0.7.11 release, but it should works
>>> as is and
>>> |> just use inline -- so no messing with makefile etc.
>>> |>
>>> |> Try that and see how it goes and keep us posted.
>>> |>
>>> |> Cheers, Dirk
>>> |>
>>> |>
>>> |> | i also had some problem using Armadillo which I posted on the
>>> Armadillo
>>> |> | discussion board. Conrad got back to me. Here is the discussion:
>>> |> | https://sourceforge.net/apps/phpbb/arma/viewtopic.php?f=1&t=4
>>> <https://sourceforge.net/apps/phpbb/arma/viewtopic.php?f=1&t=4>
>>> |> |
>>> |> | so it may be that armadillo is the problem but im really not sure.
>>> |> |
>>> |> | Many thanks
>>> |> | Abhisek
>>> |> |
>>> |> | On Fri, Mar 26, 2010 at 12:17 PM, Dirk Eddelbuettel
>>> <edd at debian.org<mailto:edd at debian.org>>
>>> |> wrote:
>>> |> |
>>> |> |>
>>> |> |> (resending, this time to list I omitted last time, sorry.
>>> --Dirk)
>>> |> |>
>>> |> |> On 26 March 2010 at 11:10, Abhisek wrote:
>>> |> |> | Hi,
>>> |> |> |
>>> |> |> | Ive been trying to make RcppArmadillo work using the
>>> example file
>>> |> |> (fastLM).
>>> |> |> | I copied and pasted the code and saved it as
>>> RcppArmadilloEg.cpp (not
>>> |> to
>>> |> |> use
>>> |> |> | fastLM but to figure out how to work RcppArmadillo). Then
>>> i tried
>>> |> using
>>> |> |> the
>>> |> |> | command R CMD SHLIB RcppArmadilloEg.cpp but an error came
>>> up saying
>>> |> that
>>> |> |> | RcppArmadillo.h not found.
>>> |> |> |
>>> |> |> | So i tried doing a symbolic link from /usr/local/include
>>> to the
>>> |> directory
>>> |> |> | where RcppArmadillo.h and RcppArmadilloDefines.h is
>>> stored. I also
>>> |> did a
>>> |> |> | symbolic link analogously for RcppArmadillo.so. When i
>>> ran R CMD
>>> |> SHLIB
>>> |> |> | again I got the following error:
>>> |> |> |
>>> |> |> | abhisek at shieks:~/Desktop/Personal/Test$ R CMD SHLIB
>>> |> RcppArmadilloEg.cpp
>>> |> |> | g++ -I/usr/share/R/include
>>> |> |> | -I/home/abhisek/R/i486-pc-linux-gnu-library/2.10/Rcpp/lib
>>> -fpic -g
>>> |> -O2
>>> |> |> -c
>>> |> |> | RcppArmadilloEg.cpp -o RcppArmadilloEg.o
>>> |> |>
>>> |> |> So far so good: one -I for R as usual, one for Rcpp.
>>> |> |>
>>> |> |> | In file included from
>>> |> |> |
>>> |>
>>> /home/abhisek/R/i486-pc-linux-gnu-library/2.10/Rcpp/lib/RcppCommon.h:215,
>>> |> |> | from
>>> |> |> |
>>> /home/abhisek/R/i486-pc-linux-gnu-library/2.10/Rcpp/lib/Rcpp.h:28,
>>> |> |> | from RcppArmadilloEg.cpp:1:
>>> |> |> |
>>> |> |>
>>> |>
>>> /home/abhisek/R/i486-pc-linux-gnu-library/2.10/Rcpp/lib/Rcpp/internal/wrap.h:
>>> |> |> | In function ‘SEXPREC*
>>> |> |> Rcpp::internal::wrap_dispatch_unknown_iterable(const
>>> |> |> | T&, Rcpp::traits::false_type) [with T = arma::Col<double>]’:
>>> |> |> |
>>> |> |>
>>> |>
>>> /home/abhisek/R/i486-pc-linux-gnu-library/2.10/Rcpp/lib/Rcpp/internal/wrap.h:491:
>>> |> |> | instantiated from ‘SEXPREC*
>>> |> Rcpp::internal::wrap_dispatch_unknown(const
>>> |> |> T&,
>>> |> |> | Rcpp::traits::false_type) [with T = arma::Col<double>]’
>>> |> |> |
>>> |> |>
>>> |>
>>> /home/abhisek/R/i486-pc-linux-gnu-library/2.10/Rcpp/lib/Rcpp/internal/wrap.h:509:
>>> |> |> | instantiated from ‘SEXPREC*
>>> |> |> | Rcpp::internal::wrap_dispatch_unknown_importable(const T&,
>>> |> |> | Rcpp::traits::false_type) [with T = arma::Col<double>]’
>>> |> |> |
>>> |> |>
>>> |>
>>> /home/abhisek/R/i486-pc-linux-gnu-library/2.10/Rcpp/lib/Rcpp/internal/wrap.h:526:
>>> |> |> | instantiated from ‘SEXPREC*
>>> Rcpp::internal::wrap_dispatch(const T&,
>>> |> |> | Rcpp::traits::wrap_type_unknown_tag) [with T =
>>> arma::Col<double>]’
>>> |> |> |
>>> |> |>
>>> |>
>>> /home/abhisek/R/i486-pc-linux-gnu-library/2.10/Rcpp/lib/Rcpp/internal/wrap.h:541:
>>> |> |> | instantiated from ‘SEXPREC* Rcpp::wrap(const T&) [with T =
>>> |> |> | arma::Col<double>]’
>>> |> |> |
>>> |>
>>> /home/abhisek/R/i486-pc-linux-gnu-library/2.10/Rcpp/lib/Rcpp/Named.h:54:
>>> |> |> | instantiated from ‘Rcpp::Named::Named(const std::string&,
>>> const T&)
>>> |> [with
>>> |> |> T
>>> |> |> | = arma::colvec]’
>>> |> |> | RcppArmadilloEg.cpp:19: instantiated from here
>>> |> |> |
>>> |> |>
>>> |>
>>> /home/abhisek/R/i486-pc-linux-gnu-library/2.10/Rcpp/lib/Rcpp/internal/wrap.h:394:
>>> |> |> | error: cannot convert ‘const arma::Col<double>’ to
>>> ‘SEXPREC*’ in
>>> |> |> | initialization
>>> |> |> | make: *** [RcppArmadilloEg.o] Error 1
>>> |> |> |
>>> |> |> |
>>> |> |> | could someone provide some advice?
>>> |> |>
>>> |> |> Which Rcpp version do you have installed?
>>> |> |>
>>> |> |> Which Armadillo version do you have installed?
>>> |> |>
>>> |> |> I have not tried the free-floating direct compile you try
>>> here. Maybe
>>> |> the
>>> |> |> defines for RcppArmadillo that we use are missing here --
>>> hard to say.
>>> |> |>
>>> |> |> Could you try to create your own little package but copying the
>>> |> |> RcppArmadillo
>>> |> |> files, changes DESCRIPTION to what you do and changes the
>>> FastLM code
>>> |> in
>>> |> |> C++
>>> |> |> and R?
>>> |> |>
>>> |> |> Dirk
>>> |> |>
>>> |> |> --
>>> |> |> Registration is open for the 2nd International conference R
>>> / Finance
>>> |> 2010
>>> |> |> See http://www.RinFinance.com for details, and see you in
>>> Chicago in
>>> |> |> April!
>>> |> |>
>>> |>
>>> |> --
>>> |> Registration is open for the 2nd International conference R /
>>> Finance
>>> |> 2010
>>> |> See http://www.RinFinance.com for details, and see you in
>>> Chicago in
>>> |> April!
>>> |>
>>>
>>> --
>>> Registration is open for the 2nd International conference R /
>>> Finance 2010
>>> See http://www.RinFinance.com for details, and see you in Chicago
>>> in April!
>>>
>>>
>>>
>>>
>>> _______________________________________________
>>> 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
>>
>>
>> --
>> Romain Francois
>> Professional R Enthusiast
>> +33(0) 6 28 91 30 30
>> http://romainfrancois.blog.free.fr
>> |- http://tr.im/OIXN : raster images and RImageJ
>> |- http://tr.im/OcQe : Rcpp 0.7.7
>> `- http://tr.im/O1wO : highlight 0.1-5
>>
>> _______________________________________________
>> 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
>>
>
--
Romain Francois
Professional R Enthusiast
+33(0) 6 28 91 30 30
http://romainfrancois.blog.free.fr
|- http://tr.im/OIXN : raster images and RImageJ
|- http://tr.im/OcQe : Rcpp 0.7.7
`- http://tr.im/O1wO : highlight 0.1-5
More information about the Rcpp-devel
mailing list