[Rcpp-devel] Successful install of rcppbugs on Mac OS X 10.7

Nick Matzke matzke at berkeley.edu
Fri May 25 07:34:04 CEST 2012


Hi all,

Thanks for your help (Whit especially) on various things. 
After a fair bit of effort I got rccpbugs installed on my 
Mac 10.7 in R.app.  Here's my setup:

 > sessionInfo()
R version 2.14.1 (2011-12-22)
Platform: x86_64-apple-darwin9.8.0/x86_64 (64-bit)

locale:
[1] 
en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] stats     grDevices utils     datasets  graphics 
methods   base

other attached packages:
[1] rcppbugs_0.1.0        RcppArmadillo_0.3.0.2 Rcpp_0.9.10 
           inline_0.3.8

loaded via a namespace (and not attached):
[1] compiler_2.14.1 tools_2.14.1





The basic steps:

1. Install dependencies
install.packages("Rcpp")
install.packages("inline")

2. (I updated Xcode to 3.2 and installed the Command Line 
Tools, I doubt the details of this matter though.)

3. The default compiler on Mac OS X 10.7 is gcc4.2. 
However, rcppbugs needs gcc4.6.  I got gcc4.6 to install by 
following the directions here:

http://solarianprogrammer.com/2011/12/01/compiling-gcc-4-6-2-on-mac-osx-lion/

If you want to try gcc4.7, the instructions are here, but 
Whit recommends against it for now:

http://solarianprogrammer.com/2012/02/20/living-on-the-edge-building-gcc-4-7-on-mac-osx-lion/

In my case, I installed gcc46 and the 3 dependencies in 
(root)/my_gcc rather than $HOME/my_gcc.  After installing 
the dependencies, I configured and maked the gcc46 install 
as follows:

In Terminal (not R):
========================
cd /Users/nickm/Downloads/z_installed_good/gcc47/
   502  ls
   503  gunzip -c mpc-0.9.tar.gz | tar xopf -
   504  gunzip -c mpfr-3.1.0.tar.gz | tar xopf -
   505  gunzip -c gmp-5.0.5.tar.gz | tar xopf -
   506  gunzip -c gmp-5.0.5.tar.bz2 | tar xopf -
   507  tar jxf gmp-5.0.5.tar.bz2
   508  ls
   509  cd gmp*
   510  mkdir build
   511  cd build
   514  ../configure --prefix=/my_gcc
   515  make
   516  make install
   517  cd ..
   518  cd ..
   519  cd mpfr*
   520  mkdir build
   521  cd build
   522  ../configure --prefix=/my_gcc --with-gmp=/my_gcc
   523  pwd
   524  make
   525  make install
   526  cd ..
   527  cd ..
   528  cd mpc*
   529  mkdir build
   530  cd build
   532  ../configure --prefix=/my_gcc --with-gmp=/my_gcc 
--with-mpfr=/my_gcc
   533  make
   534  make install
   535  cd ..
   536  cd ..
   537  ls
   548  cd /Users/nickm/Downloads/z_installed_good/gcc46/
   549  ls
   550  gunzip -c gcc-4.6.3.tar.gz | tar xopf -
   560  cd gcc*
   561  ls
   562  mkdir build
   563  cd build
   564  ls
   565  ../configure --prefix=/my_gcc 
--enable-checking-release --with-gmp=/my_gcc 
--with-mpfr=/my_gcc --enable-languages=c,c++,fortran 
--program-suffix=46
   566  make -j 4
   567  ls
   568  cd bin
   569  make install
   570  history
========================



4. Now we have gcc 4.6.3 installed as /my_gcc/gcc46, and 
also g++46 (R uses g++ by default), but R CMD INSTALL 
doesn't know where to find it.  Solution:

4a. First we make gcc46 the default gcc:

# g++

# Change symbolic linkage:
cd /usr/bin
rm g++; ln -s /my_gcc/bin/g++46 /usr/bin/g++


(To turn it back later, we can do this)

# Change it back
cd /usr/bin
rm g++; ln -s /usr/bin/llvm-g++-4.2 /usr/bin/g++



4b. Now when we run R CMD INSTALL, it uses the correct g++, 
but for whatever reason, with gcc 4.6 the "-arch x86_64" 
flag is not recognized, so this throws an error when you 
attempt to install.

The default settings for the command-line R CMD INSTALL (and 
R CMD SHLIB) commands are stored in something like 
$R_HOME/etc/Makeconf.  You can figure it out exactly with 
R.home:

# Return the R Home Directory
# 
http://stat.ethz.ch/R-manual/R-patched/library/base/html/Rhome.html

In R:

R.home(component="home")

# "/Library/Frameworks/R.framework/Resources"
#
# Find the Makeconf file (default Make settings)
# cd /Library/Frameworks/R.framework/Resources/etc/x86_64/
#

In my case, the Makeconf file was at:

/Library/Frameworks/R.framework/Resources/etc/x86_64/Makeconf



4c. The variables specifying the compiler are:
CXX
SHLIB_CXXLD

They can be changed from their defaults by editing Makeconf:

/Library/Frameworks/R.framework/Resources/etc/x86_64/Makeconf

Or, more easily/properly by creating a Makevars file in 
$HOME/.R/Makevars

# The Makevars file should be stored at:
# $HOME/.R/Makevars

I did the latter.


5. The Makevars file:

$Home/.R/Makevars
/Users/nickm/.R/Makevars
==============================
# THIS IS THE MANUALLY-CREATED Makevars file WHICH LETS YOU 
CUSTOMIZE
# R CMD INSTALL and R CMD SHLIB compiler flags more easily 
than you
# would by modifying the Makeconf default file directly.
#
# (On this machine, Makeconf default file is at:
# /Library/Frameworks/R.framework/Resources/etc/x86_64/Makeconf
# )
#
# The Makevars file should be stored at:
# $HOME/.R/Makevars
#
#
# default for R 2.14 on Mac OS X 10.7 is to use gcc --> gcc4.2
# but we want to use gcc4.6, which doesn't use the -arch 
(architecture) tags
#
# So, edit that environment variable for R CMD INSTALL and R 
CMD SHLIB
#
# CXX - the compiler for each code file
#CXX=g++ -arch x86_64
CXX=g++ -std=c++0x

# SHLIB_CXXLD - maybe this is the linker? - YEP
#SHLIB_CXXLD = g++ -arch x86_64
SHLIB_CXXLD = g++ -std=c++0x
==============================



6. Now we are ready for rcppbugs. Download and unzip the 
source from here:

http://cran.r-project.org/web/packages/rcppbugs/index.html


7. In R:

===================
# Install from source, after changing compiler to g++46 and 
modifying Makevars:
packagepath = 
"/Users/nickm/Desktop/__projects/__BayArea/_detection_probability/_RcppBUGS/rcppbugs"

libpath = "/Library/Frameworks/R.framework/Resources/library/"

install.packages(c(packagepath), libpath, NULL, 
type='source', INSTALL_opts=c("--no-multiarch"))

cmd = paste("R CMD INSTALL --preclean --no-multiarch 
--library=", libpath, " ", packagepath, sep="")

system(cmd)
===================


The --no-multiarch flag was needed because otherwise R on 
Mac OS X attempts to also compile for PPC or i386 
architecture or something, and I didn't want to figure that out.



8. Test code:

====================================
?run.model

# Example code from run.model

NR <- 1e2L
NC <- 2L
y <- matrix(rnorm(NR,1) + 10,nr=NR,nc=1L)
X <- matrix(nr=NR,nc=NC)
X[,1] <- 1
X[,2] <- y + rnorm(NR)/2 - 10

## RCppBugs Model
b <- mcmc.normal(rnorm(NC),mu=0,tau=0.0001)
tau.y <- mcmc.gamma(sd(as.vector(y)),alpha=0.1,beta=0.1)
y.hat <- linear(X,b)
y.lik <- mcmc.normal(y,mu=y.hat,tau=tau.y,observed=TRUE)
m <- create.model(b, tau.y, y.hat, y.lik)


runtime <- system.time(ans <- run.model(m, iterations=1e2L, 
burn=1e2L, adapt=1e3L, thin=10L))
print(get.ar(ans))

print(apply(ans[["b"]],2,mean))
====================================

Done!

Nick



PS:

STUFF THAT DIDN'T WORK, BUT WHICH MIGHT BE HANDY TO GOOGLE 
FOR OTHERS WHO HIT MY ERROR MESSAGES:



ERRORS TRYING TO COMPILE cppbugs code (the precursor of 
rcppbugs) with the wrong compilers etc.; many of these are 
the product of attempting to compile with g++4.2, although I 
never got g++4.6 or 4.7 to work either, could be the -std 
flag was wrong or something.  I got similar error messages 
with rcppbugs early on before I switched compilers.

============
(very long, see next message)
============



LEFT OUT THE --no-multiarch FLAG
=========================
install.packages(c(packagepath), 
"/Library/Frameworks/R.framework/Resources/library/", NULL, 
type='source')
* installing *source* package ‘rcppbugs’ ...
files src/Makevars, src/Makevars.win, 
src/cppbugs/cppbugs/mcmc.bernoulli.hpp, 
src/cppbugs/cppbugs/mcmc.beta.hpp, 
src/cppbugs/cppbugs/mcmc.binomial.hpp, 
src/cppbugs/cppbugs/mcmc.gamma.hpp, 
src/cppbugs/cppbugs/mcmc.model.hpp, 
src/cppbugs/cppbugs/mcmc.multivariate.normal.hpp, 
src/cppbugs/cppbugs/mcmc.normal.hpp, 
src/cppbugs/cppbugs/mcmc.stochastic.hpp, 
src/cppbugs/cppbugs/mcmc.uniform.hpp, src/r.mcmc.model.h 
have the wrong MD5 checksums
** libs
*** arch - i386
g++ -std=c++0x 
-I/Library/Frameworks/R.framework/Resources/include 
-I/Library/Frameworks/R.framework/Resources/include/i386 
-I/usr/local/include 
-I"/Library/Frameworks/R.framework/Versions/2.14/Resources/library/Rcpp/include" 
-I"/Library/Frameworks/R.framework/Versions/2.14/Resources/library/RcppArmadillo/include" 
  -I/opt/local/include -I./cppbugs  -fPIC  -g -O2 -c 
interface.cpp -o interface.o
g++ -std=c++0x 
-I/Library/Frameworks/R.framework/Resources/include 
-I/Library/Frameworks/R.framework/Resources/include/i386 
-I/usr/local/include 
-I"/Library/Frameworks/R.framework/Versions/2.14/Resources/library/Rcpp/include" 
-I"/Library/Frameworks/R.framework/Versions/2.14/Resources/library/RcppArmadillo/include" 
  -I/opt/local/include -I./cppbugs  -fPIC  -g -O2 -c 
raw.address.cpp -o raw.address.o
g++ -arch i386 -dynamiclib -Wl,-headerpad_max_install_names 
-undefined dynamic_lookup -single_module -multiply_defined 
suppress -L/usr/local/lib -o rcppbugs.so helpers.o 
interface.o raw.address.o 
/Library/Frameworks/R.framework/Versions/2.14/Resources/library/Rcpp/lib/i386/libRcpp.a 
-L/Library/Frameworks/R.framework/Resources/lib/i386 
-lRlapack 
-L/Library/Frameworks/R.framework/Resources/lib/i386 -lRblas 
-lgfortran -F/Library/Frameworks/R.framework/.. -framework R 
-Wl,-framework -Wl,CoreFoundation
g++: error: i386: No such file or directory
g++: error: unrecognized option ‘-arch’
make: *** [rcppbugs.so] Error 1
ERROR: compilation failed for package ‘rcppbugs’
* removing 
‘/Library/Frameworks/R.framework/Versions/2.14/Resources/library/rcppbugs’
Warning message:
In install.packages(c(packagepath), 
"/Library/Frameworks/R.framework/Resources/library/",  :
   installation of package 
‘/Users/nickm/Desktop/__projects/__BayArea/_detection_probability/_RcppBUGS/rcppbugs’ 
had non-zero exit status
=========================



CXX CHANGED, BUT NOT SHLIB_CXXLD:
====================
system(cmd)
* installing *source* package ‘rcppbugs’ ...
files src/Makevars, src/Makevars.win, 
src/cppbugs/cppbugs/mcmc.bernoulli.hpp, 
src/cppbugs/cppbugs/mcmc.beta.hpp, 
src/cppbugs/cppbugs/mcmc.binomial.hpp, 
src/cppbugs/cppbugs/mcmc.gamma.hpp, 
src/cppbugs/cppbugs/mcmc.model.hpp, 
src/cppbugs/cppbugs/mcmc.multivariate.normal.hpp, 
src/cppbugs/cppbugs/mcmc.normal.hpp, 
src/cppbugs/cppbugs/mcmc.stochastic.hpp, 
src/cppbugs/cppbugs/mcmc.uniform.hpp, src/r.mcmc.model.h 
have the wrong MD5 checksums
** libs
*** arch - x86_64
g++ -std=c++0x 
-I/Library/Frameworks/R.framework/Resources/include 
-I/Library/Frameworks/R.framework/Resources/include/x86_64 
-I/usr/local/include 
-I"/Library/Frameworks/R.framework/Versions/2.14/Resources/library/Rcpp/include" 
-I"/Library/Frameworks/R.framework/Versions/2.14/Resources/library/RcppArmadillo/include" 
  -I/opt/local/include -I./cppbugs  -fPIC  -g -O2 -c 
helpers.cpp -o helpers.o
g++ -std=c++0x 
-I/Library/Frameworks/R.framework/Resources/include 
-I/Library/Frameworks/R.framework/Resources/include/x86_64 
-I/usr/local/include 
-I"/Library/Frameworks/R.framework/Versions/2.14/Resources/library/Rcpp/include" 
-I"/Library/Frameworks/R.framework/Versions/2.14/Resources/library/RcppArmadillo/include" 
  -I/opt/local/include -I./cppbugs  -fPIC  -g -O2 -c 
interface.cpp -o interface.o
g++ -std=c++0x 
-I/Library/Frameworks/R.framework/Resources/include 
-I/Library/Frameworks/R.framework/Resources/include/x86_64 
-I/usr/local/include 
-I"/Library/Frameworks/R.framework/Versions/2.14/Resources/library/Rcpp/include" 
-I"/Library/Frameworks/R.framework/Versions/2.14/Resources/library/RcppArmadillo/include" 
  -I/opt/local/include -I./cppbugs  -fPIC  -g -O2 -c 
raw.address.cpp -o raw.address.o
g++ -arch x86_64 -dynamiclib 
-Wl,-headerpad_max_install_names -undefined dynamic_lookup 
-single_module -multiply_defined suppress -L/usr/local/lib 
-o rcppbugs.so helpers.o interface.o raw.address.o 
/Library/Frameworks/R.framework/Versions/2.14/Resources/library/Rcpp/lib/x86_64/libRcpp.a 
-L/Library/Frameworks/R.framework/Resources/lib/x86_64 
-lRlapack 
-L/Library/Frameworks/R.framework/Resources/lib/x86_64 
-lRblas -lgfortran -F/Library/Frameworks/R.framework/.. 
-framework R -Wl,-framework -Wl,CoreFoundation
g++: error: x86_64: No such file or directory
g++: error: unrecognized option ‘-arch’
make: *** [rcppbugs.so] Error 1
ERROR: compilation failed for package ‘rcppbugs’
* removing 
‘/Library/Frameworks/R.framework/Versions/2.14/Resources/library/rcppbugs’
====================















-- 
====================================================
Nicholas J. Matzke
Ph.D. Candidate, Graduate Student Researcher

Huelsenbeck Lab
Center for Theoretical Evolutionary Genomics
4151 VLSB (Valley Life Sciences Building)
Department of Integrative Biology
University of California, Berkeley

Graduate Student Instructor, IB200B
Principles of Phylogenetics: Ecology and Evolution
http://ib.berkeley.edu/courses/ib200b/
http://phylo.wikidot.com/


Lab websites:
http://ib.berkeley.edu/people/lab_detail.php?lab=54
http://fisher.berkeley.edu/cteg/hlab.html
Dept. personal page: 
http://ib.berkeley.edu/people/students/person_detail.php?person=370
Lab personal page: 
http://fisher.berkeley.edu/cteg/members/matzke.html
Lab phone: 510-643-6299
Dept. fax: 510-643-6264

Cell phone: 510-301-0179
Email: matzke at berkeley.edu

Mailing address:
Department of Integrative Biology
1005 Valley Life Sciences Building #3140
Berkeley, CA 94720-3140

-----------------------------------------------------
"[W]hen people thought the earth was flat, they were wrong. 
When people thought the earth was spherical, they were 
wrong. But if you think that thinking the earth is spherical 
is just as wrong as thinking the earth is flat, then your 
view is wronger than both of them put together."

Isaac Asimov (1989). "The Relativity of Wrong." The 
Skeptical Inquirer, 14(1), 35-44. Fall 1989.
http://chem.tufts.edu/AnswersInScience/RelativityofWrong.htm
====================================================


More information about the Rcpp-devel mailing list