On 11 December 2019 at 14:07, Guido Kraemer wrote: | I am building an R package (https://github.com/gdkrmr/zarr-R) that wraps | a couple of C++ headers and the resulting shared object is huge (>20Mb, | see https://travis-ci.org/gdkrmr/zarr-R). I have tried to set the | following in `./src/Makevars`: | | PKG_CPPFLAGS=-I"../inst/include" -ffunction-sections -fdata-sections | PKG_LIBS=-lstdc++fs -flto -Wl,--gc-sections | | but this does not reduce the size of the shared object and produces some | warnings in `R CMD check` due to portability issues. Is there a way to | reduce the size of the shared object or do I just have to live with it?
Yes, a known issue with C++. I blogged about it a few times http://dirk.eddelbuettel.com/blog/2019/03/27#021_stripping_take_three http://dirk.eddelbuettel.com/blog/2017/08/20#010_stripping_shared_libraries http://dirk.eddelbuettel.com/blog/2017/08/14#009_compact_shared_libraries But CRAN does not allow stripping; just this week I updated a package at their request removing a strip invocation. So I think you can only add the instructions _locally_ in ~/.R/Makevars -- I have this STRIP=-Wl,-S SHLIB_CXXLDFLAGS = $(STRIP) -shared SHLIB_CXX11LDFLAGS = $(STRIP) -shared SHLIB_CXX14LDFLAGS = $(STRIP) -shared SHLIB_FCLDFLAGS = $(STRIP) -shared SHLIB_LDFLAGS = $(STRIP) -shared but not in shipped packages going e.g. to CRAN. Dirk -- http://dirk.eddelbuettel.com | @eddelbuettel | e...@debian.org ______________________________________________ R-package-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-package-devel