[R-pkg-devel] reduce size of shared objects
    Dirk Eddelbuettel 
    edd @end|ng |rom deb|@n@org
       
    Wed Dec 11 14:19:09 CET 2019
    
    
  
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 | edd using debian.org
    
    
More information about the R-package-devel
mailing list