alexholehouse
2012-Jun-07 17:32 UTC
[Rd] Lack of -O2 (or -O) gcc compiler flag causes package installation failure
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 ... 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.
Simon Urbanek
2012-Jun-07 18:03 UTC
[Rd] Lack of -O2 (or -O) gcc compiler flag causes package installation failure
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