[Rd] compile c++ code in an R package without -g
Dirk Eddelbuettel
edd at debian.org
Sun Oct 16 16:09:20 CEST 2016
On 16 October 2016 at 09:46, Da Zheng wrote:
| I'm writing an R package that is mainly written in C++. By default, R
| CMD INSTALL creates C/C++ flags as follows:
| -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat
| -Werror=format-security -D_FORTIFY_SOURCE=2 -g
That looks like you are running R on a Debian or Ubuntu system as these are
the compilation defaults we set everywhere, and which my r-base-core package
has via the same defaults.
That is also where the `-g` comes from. By default we compile everything
with debugging, and (these days) strip debug symbols away in a -dbg package.
I.e. if you wanted to use gdb to analyse R you could without recompilation by
just installing the r-base-core-dbg package. That is a nice feature.
| However, my package is fairly large. With debug info compiled into the
| library, the generated .so file is over 200MB. Without debug info,
| it's about 30MB. I hope by default debug info is disabled.
You cannot, currently.
The values in Makeconf (for us in /etc/R/Makeconf) cannot be edited before `R
CMD INSTALL` et al use them. That is a pity, but such is life. We had prior
discussions about this here; and at least Simon chimed in once and confirmed.
| However, I don't see any option in R CMD INSTALL that can disable
| "-g". Could anyone tell me how to disable it?
You cannot, currently.
There are a few ways out:
i) Quick local fix: Edit /etc/R/Makeconf. Obviously not portable.
ii) Rebuild R without -g in the configure flags. Ditto.
iii) Do something in src/Makevars to strip after the build. May be
flagged as non-portable by CRAN but at least it tries.
iv) (Lot of work, potentially) Patch the R build system to allow, say,
sed filtering of some of the values in Makeconf. Get the patch
included.
Hope this helps, Dirk
--
http://dirk.eddelbuettel.com | @eddelbuettel | edd at debian.org
More information about the R-devel
mailing list