From simon.urbanek at r-project.org  Thu Jun  7 20:03:37 2012
From: simon.urbanek at r-project.org (Simon Urbanek)
Date: Thu, 7 Jun 2012 14:03:37 -0400
Subject: [Rd] Lack of -O2 (or -O) gcc compiler flag causes package
	installation failure
In-Reply-To: <1339090321320-4632723.post@n4.nabble.com>
References: <1339090321320-4632723.post@n4.nabble.com>
Message-ID: <463912F0-5E24-474F-A67F-07F1B7AEC6CD@r-project.org>


On Jun 7, 2012, at 1:32 PM, alexholehouse wrote:

> Hello all - first time poster long time reader,
> 
> I'm currently working on a package, and was interested to compare
> performance with and without gcc/g++ -O based optimization. I can turn the
> -O flags off with a ~.R/Makevars file, but when I do something odd happens.
> The package installs fine when gcc is fed -O2 or -O3
> 
> *install with*
> R CMD INSTALL --configure-args="CFLAGS=-g CXXFLAGS=-g --disable-openmp"
> package.tar.gz
> /NB: I have opnemp switched off here as it's not supported by Apple's GCC
> (4.2.1). When the code runs on a linux cluster it compiles with openmp and
> runs no problem./
> 
> *makevars file*
> CC = gcc -arch x86_64 -std=gnu99
> CFLAGS = -g -O2 $(LTO) /# with -O2 we compile fine /
> CPICFLAGS = -fPIC
> CPPFLAGS = -I/usr/local/include
> CXX = g++ -arch x86_64
> CXXCPP = g++ -arch x86_64 -E
> CXXFLAGS = -g $(LTO)
> CXXPICFLAGS = -fPIC
> 

Is this your real Makevars? That would override all R settings and break a lot of things ... You should not set anything other than PKG_xx flags in Makevars since the "regular" flags are taken from R. Providing the source of package.tar.gz would give us more insight on what you're actually doing - I suspect that the problem is in you breaking the build system and not in the optimization flags ...

Cheers,
Simon


> ... compiles and installs no problem.
> 
> However, if I remove the -O (or use -O0, -O1) it fails with the following
> error
> 
> ** preparing package for lazy loading
> ** help
> *** installing help indices
> ** building package indices
> ** testing if installed package can be loaded
> Error in dyn.load(file, DLLpath = DLLpath, ...) : 
>  unable to load shared object
> '/Users/alex/Library/R/2.15/library/citpp/libs/x86_64/citpp.so':
>  dlopen(/Users/alex/Library/R/2.15/library/citpp/libs/x86_64/citpp.so, 6):
> Symbol not found: _mymax
>  Referenced from:
> /Users/alex/Library/R/2.15/library/citpp/libs/x86_64/citpp.so
>  Expected in: flat namespace
> in /Users/alex/Library/R/2.15/library/citpp/libs/x86_64/citpp.so
> Error: loading failed
> Execution halted
> ERROR: loading failed
> * removing ?/Users/alex/Library/R/2.15/library/citpp?
> * restoring previous ?/Users/alex/Library/R/2.15/library/citpp?
> 
> This isn't a huge problem (for me, right now), but I don't understand why
> changing the compiler optimization level to less optimization would cause a
> dyn.load error? I can remove the optimization flag from g++ no problem. Any
> advice or ideas would be appreciated! 
> 
> --
> View this message in context: http://r.789695.n4.nabble.com/Lack-of-O2-or-O-gcc-compiler-flag-causes-package-installation-failure-tp4632723.html
> Sent from the R devel mailing list archive at Nabble.com.
> 
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel



[Rd] Lack of -O2 (or -O) gcc compiler flag causes package installation failure
Simon Urbanek