[Rcpp-devel] Seamless Rcpp gives errors with RcppArmadillo
Anirban Mukherjee
anirban.mukherjee at gmail.com
Tue Jul 2 04:57:33 CEST 2013
Hi John,
Excellent, glad that worked out. In case you (or others on Mac) want to
play with C++11: http://gallery.rcpp.org/articles/first-steps-with-C++11/
R compiles with Clang. Clang has pretty complete support for C++11. The
older gcc 4.2.x compiler does not. But at this point you will have to
compile R from source if you want to go that route. Here is what I do:
svn co https://svn.r-project.org/R/branches/R-3-0-branch R-3.0.0
cd R-3.0.0
./tools/rsync-recommended
cd ..
arch=x86_64
mkdir R-$arch
cd R-$arch
export CFLAGS="-arch $arch"
export CXXFLAGS="-arch $arch"
export OBJCFLAGS="-arch $arch"
export FFLAGS="-arch $arch"
export FCFLAGS="-arch $arch"
./configure r_arch=$arch CC="clang" CXX="clang" \
F77="gfortran" FC="gfortran" OBJC="clang" \
--x-includes=/opt/X11/include --x-libraries=/usr/X11/lib \
--with-blas='-framework vecLib' --with-lapack
make -j12
sudo make install
There maybe some typos above as I edited by hand to change anything
specific to my machine. "Most" (in my usage, all) packages work with clang.
I have never had any issues (and I have been compiling R/Rcpp with Clang
for well over a year now). But of course YMMV.
Hope that helps.
Best,
Anirban
On Fri, Jun 28, 2013 at 9:04 PM, John Swan <johnswan at spamcop.net> wrote:
> Hi Anirban,
>
> Just a quick note to thank you again and inform you that you were quite
> right.
>
> The build of gfortran that you recommended still has a broken link, but it
> is still available here:
> http://cran.r-project.org/bin/macosx/tools/gfortran-4.2.3.dmg
>
> Once this is installed alongside Xcode 4.6 and Xcode 5.0 DP, both inline
> and sourceCpp now work perfectly, and Xcode development appears to be
> unaffected.
>
> Best regards
> John
>
>
> On 27 Jun 2013, at 14:08, Anirban Mukherjee <anirban.mukherjee at gmail.com>
> wrote:
>
> Hi John,
>
> You should only need gfortran. llvm-gcc "should" work. If you don't have
> Apple's gcc, then you want the "other" gfortran from the developer website:
>
> http://r.research.att.com/gfortran-4.2.3.dmg
>
> The link seems to be down (at least I cannot access it, check with Simon
> Urbanek). That gfortran is fully independent. You may be able to find the
> binary from other repositories (including Python and Julia repos). I think
> this particular binary is used by a lot of folks across these languages.
>
> I would not expect that installing gfortran would have any impact on the
> rest of your development. I have not seen any issues due to any library
> from the developer website. Simon is an excellent steward and I tend to
> blindly trust his judgment.
>
> Best,
> Anirban
>
>
> On Thu, Jun 27, 2013 at 6:31 PM, John Swan <johnswan at spamcop.net> wrote:
>
>> Hi Anirban,
>>
>> Thank you for your help. I believe you're right, I was coming to the same
>> conclusion myself.
>>
>> One thing however, I have Mountain Lion with Xcode 4.6 installed for iOS
>> development. As far as I understand it, gcc 4.2 is not included with that
>> version of Xcode.
>>
>> Don't I have to install gcc-42-5666.3-darwin11.pkg<http://r.research.att.com/tools/gcc-42-5666.3-darwin11.pkg> to
>> get gcc 4.2 and gfortran? http://r.research.att.com/tools/ states that
>> gfortran-lion-5666-3.pkg<http://r.research.att.com/gfortran-lion-5666-3.pkg> is
>> for those who already have gcc 4.2 installed, but you seem to have it
>> working ?
>>
>> Additionally, can you tell me if installing these packages has any
>> adverse effect on your Xcode development environment (llvm-clang, iOS
>> development etc)?
>>
>> Best regards
>> John
>>
>> On 27 Jun 2013, at 04:20, Anirban Mukherjee <anirban.mukherjee at gmail.com>
>> wrote:
>>
>> inline + RcppArmadillo work on Mac. I tested the code in a Mac (Mountain
>> Lion 10.8.4) before posting. Install gfortran from:
>> http://r.research.att.com/gfortran-lion-5666-3.pkg. You can look here
>> for more information: http://r.research.att.com/tools/. If that does not
>> work, post in R-SIG-Mac.
>>
>>
>> On Wed, Jun 26, 2013 at 7:04 PM, Anirban Mukherjee <
>> anirban.mukherjee at gmail.com> wrote:
>>
>>> library(inline); library(RcppArmadillo)
>>>
>>> rowSumsRA <- cxxfunction(signature(x = "numeric"),
>>> plugin="RcppArmadillo", body='return Rcpp::wrap(arma::sum(as<arma::mat>
>>> (x),0));')
>>>
>>> colSumsRA <- cxxfunction(signature(x = "numeric"),
>>> plugin="RcppArmadillo", body='return Rcpp::wrap(arma::sum(as<arma::mat>
>>> (x),1));')
>>>
>>> Anirban
>>>
>>>> Date: Wed, 26 Jun 2013 11:11:04 +0200
>>>> From: John Swan <johnswan at spamcop.net>
>>>> To: rcpp-devel at lists.r-forge.r-project.org
>>>> Subject: [Rcpp-devel] Seamless Rcpp gives errors with RcppArmadillo
>>>> Message-ID: <99384497-D7C4-4BC6-859E-C3FA1AB5FF7D at spamcop.net>
>>>> Content-Type: text/plain; charset="windows-1252"
>>>>
>>>> Hi,
>>>>
>>>> I just purchased Dirk's book on Seamless Rcpp and I'm finding it very
>>>> useful.
>>>>
>>>> However, I'm having a strange error running RcppArmadillo inline, where
>>>> the book examples seem to manage it effortlessly.
>>>> I've been stuck on this for hours. Any help is most appreciated.
>>>>
>>>> I am using R 3.0 on Mac OS X Mountain Lion 10.8.4, sessionInfo output:
>>>> > sessionInfo()
>>>> R version 3.0.1 (2013-05-16)
>>>> Platform: x86_64-apple-darwin10.8.0 (64-bit)
>>>>
>>>> locale:
>>>> [1] en_GB.UTF-8/C/en_GB.UTF-8/C/en_GB.UTF-8/en_GB.UTF-8
>>>>
>>>> attached base packages:
>>>> [1] stats graphics grDevices utils datasets methods base
>>>>
>>>> other attached packages:
>>>> [1] inline_0.3.12 RcppArmadillo_0.3.900.0 Rcpp_0.10.3
>>>> BDgraph_2.6 huge_1.2.4 MASS_7.3-26
>>>> igraph_0.6.5-2
>>>> [8] Matrix_1.0-12 lattice_0.20-15
>>>>
>>>> loaded via a namespace (and not attached):
>>>> [1] grid_3.0.1 tools_3.0.1
>>>>
>>>>
>>>> I have the following in a source file (somefile.R):
>>>> library(Rcpp)
>>>> library(inline)
>>>> library(RcppArmadillo)
>>>>
>>>> rowSumsRcppArmadilloFunction <- '
>>>> arma::rowvec rowSumsRcppArmadillo(NumericMatrix x){
>>>> arma::mat X = arma::mat(x.begin(), x.nrow(), x.ncol(), false);
>>>> return arma::sum(X, 1);
>>>> }'
>>>>
>>>> rowSumsRcppArmadillo <- cxxfunction(signature(),
>>>> plugin="Rcpp",
>>>> incl=rowSumsRcppArmadilloFunction,
>>>> body='
>>>> return Rcpp::wrap(rowSumsRcppArmadillo());
>>>> ')
>>>>
>>>>
>>>> If I try to execute this in R console with the source command, I get:
>>>>
>>>> > source("/Users/me/Desktop/R/somefile.R")
>>>> file29967eb06d23.cpp:20: error: ?arma? has not been declared
>>>> file29967eb06d23.cpp:20: error: expected constructor, destructor, or
>>>> type conversion before ?rowSumsRcppArmadillo?
>>>> file29967eb06d23.cpp: In function ?SEXPREC* file29967eb06d23()?:
>>>> file29967eb06d23.cpp:35: error: ?rowSumsRcppArmadillo? was not declared
>>>> in this scope
>>>> make: *** [file29967eb06d23.o] Error 1
>>>>
>>>> ERROR(s) during compilation: source code errors or compiler
>>>> configuration errors!
>>>>
>>>> Program source:
>>>> 1:
>>>> 2: // includes from the plugin
>>>> 3:
>>>> 4: #include <Rcpp.h>
>>>> 5:
>>>> 6:
>>>> 7: #ifndef BEGIN_RCPP
>>>> 8: #define BEGIN_RCPP
>>>> 9: #endif
>>>> 10:
>>>> 11: #ifndef END_RCPP
>>>> 12: #define END_RCPP
>>>> 13: #endif
>>>> 14:
>>>> 15: using namespace Rcpp;
>>>> 16:
>>>> 17:
>>>> 18: // user includes
>>>> 19:
>>>> 20: arma::rowvec rowSumsRcppArmadillo(NumericMatrix x){
>>>> 21: arma::mat X = arma::mat(x.begin(), x.nrow(), x.ncol(), false);
>>>> 22: return arma::sum(X, 1);
>>>> 23: }
>>>> 24:
>>>> 25: // declarations
>>>> 26: extern "C" {
>>>> 27: SEXP file29967eb06d23( ) ;
>>>> 28: }
>>>> 29:
>>>> 30: // definition
>>>> 31:
>>>> 32: SEXP file29967eb06d23( ){
>>>> 33: BEGIN_RCPP
>>>> 34:
>>>> 35: return Rcpp::wrap(rowSumsRcppArmadillo());
>>>> 36:
>>>> 37: END_RCPP
>>>> 38: }
>>>> 39:
>>>> 40:
>>>> Error in compileCode(f, code, language = language, verbose = verbose) :
>>>> Compilation ERROR, function(s)/method(s) not created!
>>>> file29967eb06d23.cpp:20: error: ?arma? has not been declared
>>>> file29967eb06d23.cpp:20: error: expected constructor, destructor, or
>>>> type conversion before ?rowSumsRcppArmadillo?
>>>> file29967eb06d23.cpp: In function ?SEXPREC* file29967eb06d23()?:
>>>> file29967eb06d23.cpp:35: error: ?rowSumsRcppArmadillo? was not declared
>>>> in this scope
>>>> make: *** [file29967eb06d23.o] Error 1
>>>> In addition: Warning message:
>>>> running command '/Library/Frameworks/R.framework/Resources/bin/R CMD
>>>> SHLIB file29967eb06d23.cpp 2> file29967eb06d23.cpp.err.txt' had status 1
>>>>
>>>> I added these:
>>>> 20: #include <RcppArmadillo.h>
>>>> 21: // [[Rcpp::depends(RcppArmadillo)]]
>>>> 22:
>>>> 23: // [[Rcpp::export]]
>>>> 24:
>>>> 25: arma::rowvec rowSumsRcppArmadillo(NumericMatrix x){
>>>> 26: arma::mat X = arma::mat(x.begin(), x.nrow(), x.ncol(), false);
>>>> 27: return arma::sum(X, 1);
>>>> 28: }
>>>>
>>>> But then I just get this error:
>>>> Error in compileCode(f, code, language = language, verbose = verbose) :
>>>> Compilation ERROR, function(s)/method(s) not created!
>>>> file77e03dcff275.cpp:20:27: error: RcppArmadillo.h: No such file or
>>>> directory
>>>> file77e03dcff275.cpp:25: error: ?arma? has not been declared
>>>> file77e03dcff275.cpp:25: error: expected constructor, destructor, or
>>>> type conversion before ?rowSumsRcppArmadillo?
>>>> file77e03dcff275.cpp: In function ?SEXPREC* file77e03dcff275()?:
>>>> file77e03dcff275.cpp:40: error: ?rowSumsRcppArmadillo? was not declared
>>>> in this scope
>>>> make: *** [file77e03dcff275.o] Error 1
>>>> In addition: Warning message:
>>>> running command '/Library/Frameworks/R.framework/Resources/bin/R CMD
>>>> SHLIB file77e03dcff275.cpp 2> file77e03dcff275.cpp.err.txt' had status 1
>>>>
>>>>
>>>>
>>>> So, I thought I'd try compilng it as a package, but when I try to call
>>>> the package in R, I get errors like:
>>>> Error in sourceCpp("./R/somefile.R") :
>>>> Error 1 occurred building shared library.
>>>>
>>>> WARNING: The tools required to build C++ code for R were not found.
>>>>
>>>> Please install Command Line Tools for XCode (or equivalent).
>>>>
>>>> ld: warning: directory not found for option
>>>> '-L/usr/local/lib/gcc/i686-apple-darwin8/4.2.3/x86_64'
>>>> ld: warning: directory not found for option '-L/usr/local/lib/x86_64'
>>>> ld: warning: directory not found for option
>>>> '-L/usr/local/lib/gcc/i686-apple-darwin8/4.2.3'
>>>> ld: library not found for -lgfortran
>>>> collect2: ld returned 1 exit status
>>>> make: *** [sourceCpp_13326.so] Error 1
>>>>
>>>>
>>>> The XCode command line tools *are* installed - I'm an iOS developer so
>>>> I always make sure that they are there:
>>>>
>>>> John-MBPR:BDGraphSource johnswan$ which llvm-g++
>>>> /usr/bin/llvm-g++
>>>> John-MBPR:BDGraphSource johnswan$ llvm-g++ --version
>>>> i686-apple-darwin11-llvm-g++-4.2 (GCC) 4.2.1 (Based on Apple Inc. build
>>>> 5658) (LLVM build 2336.11.00)
>>>> Copyright (C) 2007 Free Software Foundation, Inc.
>>>> This is free software; see the source for copying conditions. There is
>>>> NO
>>>> warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR
>>>> PURPOSE.
>>>>
>>>>
>>>> Can anyone help?
>>>>
>>>> Thanks
>>>> John
>>>> -------------- next part --------------
>>>> An HTML attachment was scrubbed...
>>>> URL: <
>>>> http://lists.r-forge.r-project.org/pipermail/rcpp-devel/attachments/20130626/f34959cc/attachment-0001.html
>>>> >
>>>>
>>>> ------------------------------
>>>>
>>>
>> _______________________________________________
>> 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/20130702/f8e143fc/attachment-0001.html>
More information about the Rcpp-devel
mailing list