Impossible compilation in rstan or brms (Linux), due to C++ compilation problem

Setup : Linux Debian testing, R 4.0.4.

      rstan StanHeaders     ggplot2  rstantools 
   "2.21.2"  "2.21.0-7"     "3.3.3"     "2.1.1" 
> 
> system("c++ --version")
c++ (Debian 10.2.1-6) 10.2.1 20210110
Copyright (C) 2020 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

> system("ld --version")
GNU ld (GNU Binutils for Debian) 2.35.2
Copyright (C) 2020 Free Software Foundation, Inc.
Ce logiciel est libre; si vous le redistribuez, vous devez le faire selon les termes
de la licence GNU General Public License version 3 ou postérieure selon votre besoin.
Ce logiciel n'est couvert par aucune GARANTIE.
> writeLines(readLines(file.path(Sys.getenv("HOME"), ".R/Makevars")))
Error in file(con, "r") : impossible d'ouvrir la connexion
De plus : Warning message:
In file(con, "r") :
  impossible d'ouvrir le fichier '/home/charpent/.R/Makevars' : Aucun fichier ou dossier de ce type
> devtools::session_info("rstan")
─ Session info ───────────────────────────────────────────────────────────────
 setting  value                        
 version  R version 4.0.4 (2021-02-15) 
 os       Debian GNU/Linux bullseye/sid
 system   x86_64, linux-gnu            
 ui       X11                          
 language (EN)                         
 collate  fr_FR.UTF-8                  
 ctype    fr_FR.UTF-8                  
 tz       Europe/Paris                 
 date     2021-03-21                   

─ Packages ───────────────────────────────────────────────────────────────────
 package      * version   date       lib source        
 assertthat     0.2.1     2019-03-21 [1] CRAN (R 4.0.0)
 backports      1.2.1     2020-12-09 [1] CRAN (R 4.0.3)
 BH             1.75.0-0  2021-01-11 [1] CRAN (R 4.0.3)
 callr          3.5.1     2020-10-13 [1] CRAN (R 4.0.3)
 checkmate      2.0.0     2020-02-06 [1] CRAN (R 4.0.0)
 cli            2.3.1     2021-02-23 [1] CRAN (R 4.0.4)
 colorspace     2.0-0     2020-11-11 [1] CRAN (R 4.0.3)
 crayon         1.4.1     2021-02-08 [1] CRAN (R 4.0.3)
 curl           4.3       2019-12-02 [1] CRAN (R 4.0.0)
 desc           1.3.0     2021-03-05 [1] CRAN (R 4.0.4)
 digest         0.6.27    2020-10-24 [1] CRAN (R 4.0.3)
 ellipsis       0.3.1     2020-05-15 [1] CRAN (R 4.0.0)
 fansi          0.4.2     2021-01-15 [1] CRAN (R 4.0.3)
 farver         2.1.0     2021-02-28 [1] CRAN (R 4.0.4)
 ggplot2      * 3.3.3     2020-12-30 [1] CRAN (R 4.0.3)
 glue           1.4.2     2020-08-27 [1] CRAN (R 4.0.2)
 gridExtra      2.3       2017-09-09 [1] CRAN (R 4.0.0)
 gtable         0.3.0     2019-03-25 [1] CRAN (R 4.0.0)
 inline         0.3.17    2020-12-01 [1] CRAN (R 4.0.3)
 isoband        0.2.4     2021-03-03 [1] CRAN (R 4.0.4)
 jsonlite       1.7.2     2020-12-09 [1] CRAN (R 4.0.3)
 labeling       0.4.2     2020-10-20 [1] CRAN (R 4.0.3)
 lattice        0.20-41   2020-04-02 [3] CRAN (R 4.0.0)
 lifecycle      1.0.0     2021-02-15 [1] CRAN (R 4.0.3)
 loo            2.4.1     2020-12-09 [1] CRAN (R 4.0.3)
 magrittr       2.0.1     2020-11-17 [1] CRAN (R 4.0.3)
 MASS           7.3-53.1  2021-02-12 [3] CRAN (R 4.0.3)
 Matrix         1.3-2     2021-01-06 [3] CRAN (R 4.0.3)
 matrixStats    0.58.0    2021-01-29 [1] CRAN (R 4.0.3)
 mgcv           1.8-34    2021-02-16 [3] CRAN (R 4.0.4)
 munsell        0.5.0     2018-06-12 [1] CRAN (R 4.0.0)
 nlme           3.1-152   2021-02-04 [3] CRAN (R 4.0.3)
 pillar         1.5.1     2021-03-05 [1] CRAN (R 4.0.4)
 pkgbuild       1.2.0     2020-12-15 [1] CRAN (R 4.0.3)
 pkgconfig      2.0.3     2019-09-22 [1] CRAN (R 4.0.0)
 prettyunits    1.1.1     2020-01-24 [1] CRAN (R 4.0.0)
 processx       3.4.5     2020-11-30 [1] CRAN (R 4.0.3)
 ps             1.6.0     2021-02-28 [1] CRAN (R 4.0.4)
 R6             2.5.0     2020-10-28 [1] CRAN (R 4.0.3)
 RColorBrewer   1.1-2     2014-12-07 [1] CRAN (R 4.0.0)
 Rcpp           1.0.6     2021-01-15 [1] CRAN (R 4.0.3)
 RcppEigen      0.3.3.9.1 2020-12-17 [1] CRAN (R 4.0.3)
 RcppParallel   5.0.3     2021-02-24 [1] CRAN (R 4.0.4)
 rlang          0.4.10    2020-12-30 [1] CRAN (R 4.0.3)
 rprojroot      2.0.2     2020-11-15 [1] CRAN (R 4.0.3)
 rstan        * 2.21.2    2020-07-27 [1] CRAN (R 4.0.2)
 scales         1.1.1     2020-05-11 [1] CRAN (R 4.0.0)
 StanHeaders  * 2.21.0-7  2020-12-17 [1] CRAN (R 4.0.3)
 tibble         3.1.0     2021-02-25 [1] CRAN (R 4.0.4)
 utf8           1.2.1     2021-03-12 [1] CRAN (R 4.0.4)
 V8             3.4.0     2020-11-04 [1] CRAN (R 4.0.3)
 vctrs          0.3.6     2020-12-17 [1] CRAN (R 4.0.3)
 viridisLite    0.3.0     2018-02-01 [1] CRAN (R 4.0.0)
 withr          2.4.1     2021-01-26 [1] CRAN (R 4.0.3)

[1] /usr/local/lib/R/site-library
[2] /usr/lib/R/site-library
[3] /usr/lib/R/library

My problem can be summarized as : the C++ compilation of any brms or rstan models aborts.

Example : Stan model :

// The simplest rstan model : estimate mean and variance of a
// (supposedly normal) vector...

data {
  int		N;
  vector[N]	X;
}

parameters {
  real		mu;
  real<lower=0>	sigma;
}

model {
  // Priors
  target += cauchy_lpdf(mu | 0, 5);
  target += cauchy_lpdf(sigma | 0, 5);
  // Likelihood
  target += normal_lpdf(X | mu, sigma);
}

R rstan call :

> system.time(Model <- stan_model(file = "Mod0.stan"))
make cmd is
  make -f '/usr/lib/R/etc/Makeconf' -f '/usr/share/R/share/make/shlib.mk' CXX='$(CXX14) $(CXX14STD)' CXXFLAGS='$(CXX14FLAGS)' CXXPICFLAGS='$(CXX14PICFLAGS)' SHLIB_LDFLAGS='$(SHLIB_CXX14LDFLAGS)' SHLIB_LD='$(SHLIB_CXX14LD)' SHLIB='file27ae3501095f6.so' OBJECTS='file27ae3501095f6.o'

make would use
if test  "zfile27ae3501095f6.o" != "z"; then \
  echo g++ -std=gnu++14 -shared -L"/usr/lib/R/lib" -Wl,-z,relro -o file27ae3501095f6.so file27ae3501095f6.o  '/usr/local/lib/R/site-library/rstan/lib//libStanServices.a' -L'/usr/local/lib/R/site-library/StanHeaders/lib/' -lStanHeaders -L'/usr/local/lib/R/site-library/RcppParallel/lib/' -ltbb  -L"/usr/lib/R/lib" -lR; \
  g++ -std=gnu++14 -shared -L"/usr/lib/R/lib" -Wl,-z,relro -o file27ae3501095f6.so file27ae3501095f6.o  '/usr/local/lib/R/site-library/rstan/lib//libStanServices.a' -L'/usr/local/lib/R/site-library/StanHeaders/lib/' -lStanHeaders -L'/usr/local/lib/R/site-library/RcppParallel/lib/' -ltbb  -L"/usr/lib/R/lib" -lR; \
fi
Error in compileCode(f, code, language = language, verbose = verbose) : 
    650 |   return internal::first_aligned<int(unpacket_traits<DefaultPacketType>::alignment),Derived>(m);      |                                                                          ^~~~~~~~~/usr/bin/ld: /usr/local/lib/R/site-library/rstan/lib//libStanServices.a(stan_fit.o): réadressage R_X86_64_PC32 vers non défini symbole caché « _ZTCN5boost10wrapexceptISt12domain_errorEE0_NS_16exception_detail10clone_implINS3_19error_info_injectorIS1_EEEE » ne peut pas être utilisé en créant un objet partagé/usr/bin/ld : échec de l'édition de liens finale : mauvaise valeurcollect2: error: ld returned 1 exit statusmake: *** [/usr/share/R/share/make/shlib.mk:10 : file27ae3501095f6.so] Erreur 1
Error in sink(type = "output") : connexion incorrecte
Timing stopped at: 64.7 4.147 67.7

brms calls abort wit a similar result…

Perusing the previous reports of problems related to compilation errors on Discourse didn’t reveal relevant reports : most of them seem to be Mac (most notably XCode)- or Windows-related, but I’m running Linux.

On this machine,I had no problem running brms or rstan problems about 4 months ago. The problem seems more recent.

Mayday !

1 Like

Another attempt, with a different result :

example(stan_model, run.dontrun = TRUE)

stn_md> stancode <- 'data {real y_mean;} parameters {real y;} model {y ~ normal(y_mean,1);}'

stn_md> mod <- stan_model(model_code = stancode, verbose = TRUE)

TRANSLATING MODEL '16a540c6086086816528e4524def24d9' FROM Stan CODE TO C++ CODE NOW.
successful in parsing the Stan model '16a540c6086086816528e4524def24d9'.
COMPILING THE C++ CODE FOR MODEL '16a540c6086086816528e4524def24d9' NOW.
OS: x86_64, linux-gnu; rstan: 2.21.2; Rcpp: 1.0.6; inline: 0.3.17 
 >> setting environment variables: 
PKG_LIBS =  '/usr/local/lib/R/site-library/rstan/lib//libStanServices.a' -L'/usr/local/lib/R/site-library/StanHeaders/lib/' -lStanHeaders -L'/usr/local/lib/R/site-library/RcppParallel/lib/' -ltbb
PKG_CPPFLAGS =   -I"/usr/local/lib/R/site-library/Rcpp/include/"  -I"/usr/local/lib/R/site-library/RcppEigen/include/"  -I"/usr/local/lib/R/site-library/RcppEigen/include/unsupported"  -I"/usr/local/lib/R/site-library/BH/include" -I"/usr/local/lib/R/site-library/StanHeaders/include/src/"  -I"/usr/local/lib/R/site-library/StanHeaders/include/"  -I"/usr/local/lib/R/site-library/RcppParallel/include/"  -I"/usr/local/lib/R/site-library/rstan/include" -DEIGEN_NO_DEBUG  -DBOOST_DISABLE_ASSERTS  -DBOOST_PENDING_INTEGER_LOG2_HPP  -DSTAN_THREADS  -DBOOST_NO_AUTO_PTR  -include '/usr/local/lib/R/site-library/StanHeaders/include/stan/math/prim/mat/fun/Eigen.hpp'  -D_REENTRANT -DRCPP_PARALLEL_USE_TBB=1 
 >> Program source :

   1 : 
   2 : // includes from the plugin
   3 : // [[Rcpp::plugins(cpp14)]]
   4 : 
   5 : 
   6 : // user includes
   7 : #include <Rcpp.h>
   8 : #include <rstan/io/rlist_ref_var_context.hpp>
   9 : #include <rstan/io/r_ostream.hpp>
  10 : #include <rstan/stan_args.hpp>
  11 : #include <boost/integer/integer_log2.hpp>
  12 : // Code generated by Stan version 2.21.0
  13 : 
  14 : #include <stan/model/model_header.hpp>
  15 : 
  16 : namespace model27ae3269d9a77_16a540c6086086816528e4524def24d9_namespace {
  17 : 
  18 : using std::istream;
  19 : using std::string;
  20 : using std::stringstream;
  21 : using std::vector;
  22 : using stan::io::dump;
  23 : using stan::math::lgamma;
  24 : using stan::model::prob_grad;
  25 : using namespace stan::math;
  26 : 
  27 : static int current_statement_begin__;
  28 : 
  29 : stan::io::program_reader prog_reader__() {
  30 :     stan::io::program_reader reader;
  31 :     reader.add_event(0, 0, "start", "model27ae3269d9a77_16a540c6086086816528e4524def24d9");
  32 :     reader.add_event(3, 1, "end", "model27ae3269d9a77_16a540c6086086816528e4524def24d9");
  33 :     return reader;
  34 : }
  35 : 
  36 : class model27ae3269d9a77_16a540c6086086816528e4524def24d9
  37 :   : public stan::model::model_base_crtp<model27ae3269d9a77_16a540c6086086816528e4524def24d9> {
  38 : private:
  39 :         double y_mean;
  40 : public:
  41 :     model27ae3269d9a77_16a540c6086086816528e4524def24d9(rstan::io::rlist_ref_var_context& context__,
  42 :         std::ostream* pstream__ = 0)
  43 :         : model_base_crtp(0) {
  44 :         ctor_body(context__, 0, pstream__);
  45 :     }
  46 : 
  47 :     model27ae3269d9a77_16a540c6086086816528e4524def24d9(stan::io::var_context& context__,
  48 :         unsigned int random_seed__,
  49 :         std::ostream* pstream__ = 0)
  50 :         : model_base_crtp(0) {
  51 :         ctor_body(context__, random_seed__, pstream__);
  52 :     }
  53 : 
  54 :     void ctor_body(stan::io::var_context& context__,
  55 :                    unsigned int random_seed__,
  56 :                    std::ostream* pstream__) {
  57 :         typedef double local_scalar_t__;
  58 : 
  59 :         boost::ecuyer1988 base_rng__ =
  60 :           stan::services::util::create_rng(random_seed__, 0);
  61 :         (void) base_rng__;  // suppress unused var warning
  62 : 
  63 :         current_statement_begin__ = -1;
  64 : 
  65 :         static const char* function__ = "model27ae3269d9a77_16a540c6086086816528e4524def24d9_namespace::model27ae3269d9a77_16a540c6086086816528e4524def24d9";
  66 :         (void) function__;  // dummy to suppress unused var warning
  67 :         size_t pos__;
  68 :         (void) pos__;  // dummy to suppress unused var warning
  69 :         std::vector<int> vals_i__;
  70 :         std::vector<double> vals_r__;
  71 :         local_scalar_t__ DUMMY_VAR__(std::numeric_limits<double>::quiet_NaN());
  72 :         (void) DUMMY_VAR__;  // suppress unused var warning
  73 : 
  74 :         try {
  75 :             // initialize data block variables from context__
  76 :             current_statement_begin__ = 1;
  77 :             context__.validate_dims("data initialization", "y_mean", "double", context__.to_vec());
  78 :             y_mean = double(0);
  79 :             vals_r__ = context__.vals_r("y_mean");
  80 :             pos__ = 0;
  81 :             y_mean = vals_r__[pos__++];
  82 : 
  83 : 
  84 :             // initialize transformed data variables
  85 :             // execute transformed data statements
  86 : 
  87 :             // validate transformed data
  88 : 
  89 :             // validate, set parameter ranges
  90 :             num_params_r__ = 0U;
  91 :             param_ranges_i__.clear();
  92 :             current_statement_begin__ = 1;
  93 :             num_params_r__ += 1;
  94 :         } catch (const std::exception& e) {
  95 :             stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__());
  96 :             // Next line prevents compiler griping about no return
  97 :             throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***");
  98 :         }
  99 :     }
 100 : 
 101 :     ~model27ae3269d9a77_16a540c6086086816528e4524def24d9() { }
 102 : 
 103 : 
 104 :     void transform_inits(const stan::io::var_context& context__,
 105 :                          std::vector<int>& params_i__,
 106 :                          std::vector<double>& params_r__,
 107 :                          std::ostream* pstream__) const {
 108 :         typedef double local_scalar_t__;
 109 :         stan::io::writer<double> writer__(params_r__, params_i__);
 110 :         size_t pos__;
 111 :         (void) pos__; // dummy call to supress warning
 112 :         std::vector<double> vals_r__;
 113 :         std::vector<int> vals_i__;
 114 : 
 115 :         current_statement_begin__ = 1;
 116 :         if (!(context__.contains_r("y")))
 117 :             stan::lang::rethrow_located(std::runtime_error(std::string("Variable y missing")), current_statement_begin__, prog_reader__());
 118 :         vals_r__ = context__.vals_r("y");
 119 :         pos__ = 0U;
 120 :         context__.validate_dims("parameter initialization", "y", "double", context__.to_vec());
 121 :         double y(0);
 122 :         y = vals_r__[pos__++];
 123 :         try {
 124 :             writer__.scalar_unconstrain(y);
 125 :         } catch (const std::exception& e) {
 126 :             stan::lang::rethrow_located(std::runtime_error(std::string("Error transforming variable y: ") + e.what()), current_statement_begin__, prog_reader__());
 127 :         }
 128 : 
 129 :         params_r__ = writer__.data_r();
 130 :         params_i__ = writer__.data_i();
 131 :     }
 132 : 
 133 :     void transform_inits(const stan::io::var_context& context,
 134 :                          Eigen::Matrix<double, Eigen::Dynamic, 1>& params_r,
 135 :                          std::ostream* pstream__) const {
 136 :       std::vector<double> params_r_vec;
 137 :       std::vector<int> params_i_vec;
 138 :       transform_inits(context, params_i_vec, params_r_vec, pstream__);
 139 :       params_r.resize(params_r_vec.size());
 140 :       for (int i = 0; i < params_r.size(); ++i)
 141 :         params_r(i) = params_r_vec[i];
 142 :     }
 143 : 
 144 : 
 145 :     template <bool propto__, bool jacobian__, typename T__>
 146 :     T__ log_prob(std::vector<T__>& params_r__,
 147 :                  std::vector<int>& params_i__,
 148 :                  std::ostream* pstream__ = 0) const {
 149 : 
 150 :         typedef T__ local_scalar_t__;
 151 : 
 152 :         local_scalar_t__ DUMMY_VAR__(std::numeric_limits<double>::quiet_NaN());
 153 :         (void) DUMMY_VAR__;  // dummy to suppress unused var warning
 154 : 
 155 :         T__ lp__(0.0);
 156 :         stan::math::accumulator<T__> lp_accum__;
 157 :         try {
 158 :             stan::io::reader<local_scalar_t__> in__(params_r__, params_i__);
 159 : 
 160 :             // model parameters
 161 :             current_statement_begin__ = 1;
 162 :             local_scalar_t__ y;
 163 :             (void) y;  // dummy to suppress unused var warning
 164 :             if (jacobian__)
 165 :                 y = in__.scalar_constrain(lp__);
 166 :             else
 167 :                 y = in__.scalar_constrain();
 168 : 
 169 :             // model body
 170 : 
 171 :             current_statement_begin__ = 1;
 172 :             lp_accum__.add(normal_log<propto__>(y, y_mean, 1));
 173 : 
 174 :         } catch (const std::exception& e) {
 175 :             stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__());
 176 :             // Next line prevents compiler griping about no return
 177 :             throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***");
 178 :         }
 179 : 
 180 :         lp_accum__.add(lp__);
 181 :         return lp_accum__.sum();
 182 : 
 183 :     } // log_prob()
 184 : 
 185 :     template <bool propto, bool jacobian, typename T_>
 186 :     T_ log_prob(Eigen::Matrix<T_,Eigen::Dynamic,1>& params_r,
 187 :                std::ostream* pstream = 0) const {
 188 :       std::vector<T_> vec_params_r;
 189 :       vec_params_r.reserve(params_r.size());
 190 :       for (int i = 0; i < params_r.size(); ++i)
 191 :         vec_params_r.push_back(params_r(i));
 192 :       std::vector<int> vec_params_i;
 193 :       return log_prob<propto,jacobian,T_>(vec_params_r, vec_params_i, pstream);
 194 :     }
 195 : 
 196 : 
 197 :     void get_param_names(std::vector<std::string>& names__) const {
 198 :         names__.resize(0);
 199 :         names__.push_back("y");
 200 :     }
 201 : 
 202 : 
 203 :     void get_dims(std::vector<std::vector<size_t> >& dimss__) const {
 204 :         dimss__.resize(0);
 205 :         std::vector<size_t> dims__;
 206 :         dims__.resize(0);
 207 :         dimss__.push_back(dims__);
 208 :     }
 209 : 
 210 :     template <typename RNG>
 211 :     void write_array(RNG& base_rng__,
 212 :                      std::vector<double>& params_r__,
 213 :                      std::vector<int>& params_i__,
 214 :                      std::vector<double>& vars__,
 215 :                      bool include_tparams__ = true,
 216 :                      bool include_gqs__ = true,
 217 :                      std::ostream* pstream__ = 0) const {
 218 :         typedef double local_scalar_t__;
 219 : 
 220 :         vars__.resize(0);
 221 :         stan::io::reader<local_scalar_t__> in__(params_r__, params_i__);
 222 :         static const char* function__ = "model27ae3269d9a77_16a540c6086086816528e4524def24d9_namespace::write_array";
 223 :         (void) function__;  // dummy to suppress unused var warning
 224 : 
 225 :         // read-transform, write parameters
 226 :         double y = in__.scalar_constrain();
 227 :         vars__.push_back(y);
 228 : 
 229 :         double lp__ = 0.0;
 230 :         (void) lp__;  // dummy to suppress unused var warning
 231 :         stan::math::accumulator<double> lp_accum__;
 232 : 
 233 :         local_scalar_t__ DUMMY_VAR__(std::numeric_limits<double>::quiet_NaN());
 234 :         (void) DUMMY_VAR__;  // suppress unused var warning
 235 : 
 236 :         if (!include_tparams__ && !include_gqs__) return;
 237 : 
 238 :         try {
 239 :             if (!include_gqs__ && !include_tparams__) return;
 240 :             if (!include_gqs__) return;
 241 :         } catch (const std::exception& e) {
 242 :             stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__());
 243 :             // Next line prevents compiler griping about no return
 244 :             throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***");
 245 :         }
 246 :     }
 247 : 
 248 :     template <typename RNG>
 249 :     void write_array(RNG& base_rng,
 250 :                      Eigen::Matrix<double,Eigen::Dynamic,1>& params_r,
 251 :                      Eigen::Matrix<double,Eigen::Dynamic,1>& vars,
 252 :                      bool include_tparams = true,
 253 :                      bool include_gqs = true,
 254 :                      std::ostream* pstream = 0) const {
 255 :       std::vector<double> params_r_vec(params_r.size());
 256 :       for (int i = 0; i < params_r.size(); ++i)
 257 :         params_r_vec[i] = params_r(i);
 258 :       std::vector<double> vars_vec;
 259 :       std::vector<int> params_i_vec;
 260 :       write_array(base_rng, params_r_vec, params_i_vec, vars_vec, include_tparams, include_gqs, pstream);
 261 :       vars.resize(vars_vec.size());
 262 :       for (int i = 0; i < vars.size(); ++i)
 263 :         vars(i) = vars_vec[i];
 264 :     }
 265 : 
 266 :     std::string model_name() const {
 267 :         return "model27ae3269d9a77_16a540c6086086816528e4524def24d9";
 268 :     }
 269 : 
 270 : 
 271 :     void constrained_param_names(std::vector<std::string>& param_names__,
 272 :                                  bool include_tparams__ = true,
 273 :                                  bool include_gqs__ = true) const {
 274 :         std::stringstream param_name_stream__;
 275 :         param_name_stream__.str(std::string());
 276 :         param_name_stream__ << "y";
 277 :         param_names__.push_back(param_name_stream__.str());
 278 : 
 279 :         if (!include_gqs__ && !include_tparams__) return;
 280 : 
 281 :         if (include_tparams__) {
 282 :         }
 283 : 
 284 :         if (!include_gqs__) return;
 285 :     }
 286 : 
 287 : 
 288 :     void unconstrained_param_names(std::vector<std::string>& param_names__,
 289 :                                    bool include_tparams__ = true,
 290 :                                    bool include_gqs__ = true) const {
 291 :         std::stringstream param_name_stream__;
 292 :         param_name_stream__.str(std::string());
 293 :         param_name_stream__ << "y";
 294 :         param_names__.push_back(param_name_stream__.str());
 295 : 
 296 :         if (!include_gqs__ && !include_tparams__) return;
 297 : 
 298 :         if (include_tparams__) {
 299 :         }
 300 : 
 301 :         if (!include_gqs__) return;
 302 :     }
 303 : 
 304 : }; // model
 305 : 
 306 : }  // namespace
 307 : 
 308 : typedef model27ae3269d9a77_16a540c6086086816528e4524def24d9_namespace::model27ae3269d9a77_16a540c6086086816528e4524def24d9 stan_model;
 309 : 
 310 : #ifndef USING_R
 311 : 
 312 : stan::model::model_base& new_model(
 313 :         stan::io::var_context& data_context,
 314 :         unsigned int seed,
 315 :         std::ostream* msg_stream) {
 316 :   stan_model* m = new stan_model(data_context, seed, msg_stream);
 317 :   return *m;
 318 : }
 319 : 
 320 : #endif
 321 : 
 322 : 
 323 : 
 324 : #include <rstan_next/stan_fit.hpp>
 325 : 
 326 : struct stan_model_holder {
 327 :     stan_model_holder(rstan::io::rlist_ref_var_context rcontext,
 328 :                       unsigned int random_seed)
 329 :     : rcontext_(rcontext), random_seed_(random_seed)
 330 :      {
 331 :      }
 332 : 
 333 :    //stan::math::ChainableStack ad_stack;
 334 :    rstan::io::rlist_ref_var_context rcontext_;
 335 :    unsigned int random_seed_;
 336 : };
 337 : 
 338 : Rcpp::XPtr<stan::model::model_base> model_ptr(stan_model_holder* smh) {
 339 :   Rcpp::XPtr<stan::model::model_base> model_instance(new stan_model(smh->rcontext_, smh->random_seed_), true);
 340 :   return model_instance;
 341 : }
 342 : 
 343 : Rcpp::XPtr<rstan::stan_fit_base> fit_ptr(stan_model_holder* smh) {
 344 :   return Rcpp::XPtr<rstan::stan_fit_base>(new rstan::stan_fit(model_ptr(smh), smh->random_seed_), true);
 345 : }
 346 : 
 347 : std::string model_name(stan_model_holder* smh) {
 348 :   return model_ptr(smh).get()->model_name();
 349 : }
 350 : 
 351 : RCPP_MODULE(stan_fit4model27ae3269d9a77_16a540c6086086816528e4524def24d9_mod){
 352 :   Rcpp::class_<stan_model_holder>("stan_fit4model27ae3269d9a77_16a540c6086086816528e4524def24d9")
 353 :   .constructor<rstan::io::rlist_ref_var_context, unsigned int>()
 354 :   .method("model_ptr", &model_ptr)
 355 :   .method("fit_ptr", &fit_ptr)
 356 :   .method("model_name", &model_name)
 357 :   ;
 358 : }
 359 : 
 360 : 
 361 : // declarations
 362 : extern "C" {
 363 : SEXP file27ae339091edc( ) ;
 364 : }
 365 : 
 366 : // definition
 367 : SEXP file27ae339091edc() {
 368 :  return Rcpp::wrap("16a540c6086086816528e4524def24d9");
 369 : }
make cmd is
  make -f '/usr/lib/R/etc/Makeconf' -f '/usr/share/R/share/make/shlib.mk' CXX='$(CXX14) $(CXX14STD)' CXXFLAGS='$(CXX14FLAGS)' CXXPICFLAGS='$(CXX14PICFLAGS)' SHLIB_LDFLAGS='$(SHLIB_CXX14LDFLAGS)' SHLIB_LD='$(SHLIB_CXX14LD)' SHLIB='file27ae339091edc.so' OBJECTS='file27ae339091edc.o'

make would use
g++ -std=gnu++14 -I"/usr/share/R/include" -DNDEBUG   -I"/usr/local/lib/R/site-library/Rcpp/include/"  -I"/usr/local/lib/R/site-library/RcppEigen/include/"  -I"/usr/local/lib/R/site-library/RcppEigen/include/unsupported"  -I"/usr/local/lib/R/site-library/BH/include" -I"/usr/local/lib/R/site-library/StanHeaders/include/src/"  -I"/usr/local/lib/R/site-library/StanHeaders/include/"  -I"/usr/local/lib/R/site-library/RcppParallel/include/"  -I"/usr/local/lib/R/site-library/rstan/include" -DEIGEN_NO_DEBUG  -DBOOST_DISABLE_ASSERTS  -DBOOST_PENDING_INTEGER_LOG2_HPP  -DSTAN_THREADS  -DBOOST_NO_AUTO_PTR  -include '/usr/local/lib/R/site-library/StanHeaders/include/stan/math/prim/mat/fun/Eigen.hpp'  -D_REENTRANT -DRCPP_PARALLEL_USE_TBB=1      -fpic  -g -O2 -ffile-prefix-map=/build/r-base-XqSJAD/r-base-4.0.4=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -g  -c file27ae339091edc.cpp -o file27ae339091edc.o
if test  "zfile27ae339091edc.o" != "z"; then \
  echo g++ -std=gnu++14 -shared -L"/usr/lib/R/lib" -Wl,-z,relro -o file27ae339091edc.so file27ae339091edc.o  '/usr/local/lib/R/site-library/rstan/lib//libStanServices.a' -L'/usr/local/lib/R/site-library/StanHeaders/lib/' -lStanHeaders -L'/usr/local/lib/R/site-library/RcppParallel/lib/' -ltbb  -L"/usr/lib/R/lib" -lR; \
  g++ -std=gnu++14 -shared -L"/usr/lib/R/lib" -Wl,-z,relro -o file27ae339091edc.so file27ae339091edc.o  '/usr/local/lib/R/site-library/rstan/lib//libStanServices.a' -L'/usr/local/lib/R/site-library/StanHeaders/lib/' -lStanHeaders -L'/usr/local/lib/R/site-library/RcppParallel/lib/' -ltbb  -L"/usr/lib/R/lib" -lR; \
fi

[ End of part 1 , see next reply for the rest ; the whole thing is too large to be accepted. ]

1 Like

[ Part 2 ]

ERROR(s) during compilation: source code errors or compiler configuration errors!

Program source:
  1: 
  2: // includes from the plugin
  3: // [[Rcpp::plugins(cpp14)]]
  4: 
  5: 
  6: // user includes
  7: #include <Rcpp.h>
  8: #include <rstan/io/rlist_ref_var_context.hpp>
  9: #include <rstan/io/r_ostream.hpp>
 10: #include <rstan/stan_args.hpp>
 11: #include <boost/integer/integer_log2.hpp>
 12: // Code generated by Stan version 2.21.0
 13: 
 14: #include <stan/model/model_header.hpp>
 15: 
 16: namespace model27ae3269d9a77_16a540c6086086816528e4524def24d9_namespace {
 17: 
 18: using std::istream;
 19: using std::string;
 20: using std::stringstream;
 21: using std::vector;
 22: using stan::io::dump;
 23: using stan::math::lgamma;
 24: using stan::model::prob_grad;
 25: using namespace stan::math;
 26: 
 27: static int current_statement_begin__;
 28: 
 29: stan::io::program_reader prog_reader__() {
 30:     stan::io::program_reader reader;
 31:     reader.add_event(0, 0, "start", "model27ae3269d9a77_16a540c6086086816528e4524def24d9");
 32:     reader.add_event(3, 1, "end", "model27ae3269d9a77_16a540c6086086816528e4524def24d9");
 33:     return reader;
 34: }
 35: 
 36: class model27ae3269d9a77_16a540c6086086816528e4524def24d9
 37:   : public stan::model::model_base_crtp<model27ae3269d9a77_16a540c6086086816528e4524def24d9> {
 38: private:
 39:         double y_mean;
 40: public:
 41:     model27ae3269d9a77_16a540c6086086816528e4524def24d9(rstan::io::rlist_ref_var_context& context__,
 42:         std::ostream* pstream__ = 0)
 43:         : model_base_crtp(0) {
 44:         ctor_body(context__, 0, pstream__);
 45:     }
 46: 
 47:     model27ae3269d9a77_16a540c6086086816528e4524def24d9(stan::io::var_context& context__,
 48:         unsigned int random_seed__,
 49:         std::ostream* pstream__ = 0)
 50:         : model_base_crtp(0) {
 51:         ctor_body(context__, random_seed__, pstream__);
 52:     }
 53: 
 54:     void ctor_body(stan::io::var_context& context__,
 55:                    unsigned int random_seed__,
 56:                    std::ostream* pstream__) {
 57:         typedef double local_scalar_t__;
 58: 
 59:         boost::ecuyer1988 base_rng__ =
 60:           stan::services::util::create_rng(random_seed__, 0);
 61:         (void) base_rng__;  // suppress unused var warning
 62: 
 63:         current_statement_begin__ = -1;
 64: 
 65:         static const char* function__ = "model27ae3269d9a77_16a540c6086086816528e4524def24d9_namespace::model27ae3269d9a77_16a540c6086086816528e4524def24d9";
 66:         (void) function__;  // dummy to suppress unused var warning
 67:         size_t pos__;
 68:         (void) pos__;  // dummy to suppress unused var warning
 69:         std::vector<int> vals_i__;
 70:         std::vector<double> vals_r__;
 71:         local_scalar_t__ DUMMY_VAR__(std::numeric_limits<double>::quiet_NaN());
 72:         (void) DUMMY_VAR__;  // suppress unused var warning
 73: 
 74:         try {
 75:             // initialize data block variables from context__
 76:             current_statement_begin__ = 1;
 77:             context__.validate_dims("data initialization", "y_mean", "double", context__.to_vec());
 78:             y_mean = double(0);
 79:             vals_r__ = context__.vals_r("y_mean");
 80:             pos__ = 0;
 81:             y_mean = vals_r__[pos__++];
 82: 
 83: 
 84:             // initialize transformed data variables
 85:             // execute transformed data statements
 86: 
 87:             // validate transformed data
 88: 
 89:             // validate, set parameter ranges
 90:             num_params_r__ = 0U;
 91:             param_ranges_i__.clear();
 92:             current_statement_begin__ = 1;
 93:             num_params_r__ += 1;
 94:         } catch (const std::exception& e) {
 95:             stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__());
 96:             // Next line prevents compiler griping about no return
 97:             throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***");
 98:         }
 99:     }
100: 
101:     ~model27ae3269d9a77_16a540c6086086816528e4524def24d9() { }
102: 
103: 
104:     void transform_inits(const stan::io::var_context& context__,
105:                          std::vector<int>& params_i__,
106:                          std::vector<double>& params_r__,
107:                          std::ostream* pstream__) const {
108:         typedef double local_scalar_t__;
109:         stan::io::writer<double> writer__(params_r__, params_i__);
110:         size_t pos__;
111:         (void) pos__; // dummy call to supress warning
112:         std::vector<double> vals_r__;
113:         std::vector<int> vals_i__;
114: 
115:         current_statement_begin__ = 1;
116:         if (!(context__.contains_r("y")))
117:             stan::lang::rethrow_located(std::runtime_error(std::string("Variable y missing")), current_statement_begin__, prog_reader__());
118:         vals_r__ = context__.vals_r("y");
119:         pos__ = 0U;
120:         context__.validate_dims("parameter initialization", "y", "double", context__.to_vec());
121:         double y(0);
122:         y = vals_r__[pos__++];
123:         try {
124:             writer__.scalar_unconstrain(y);
125:         } catch (const std::exception& e) {
126:             stan::lang::rethrow_located(std::runtime_error(std::string("Error transforming variable y: ") + e.what()), current_statement_begin__, prog_reader__());
127:         }
128: 
129:         params_r__ = writer__.data_r();
130:         params_i__ = writer__.data_i();
131:     }
132: 
133:     void transform_inits(const stan::io::var_context& context,
134:                          Eigen::Matrix<double, Eigen::Dynamic, 1>& params_r,
135:                          std::ostream* pstream__) const {
136:       std::vector<double> params_r_vec;
137:       std::vector<int> params_i_vec;
138:       transform_inits(context, params_i_vec, params_r_vec, pstream__);
139:       params_r.resize(params_r_vec.size());
140:       for (int i = 0; i < params_r.size(); ++i)
141:         params_r(i) = params_r_vec[i];
142:     }
143: 
144: 
145:     template <bool propto__, bool jacobian__, typename T__>
146:     T__ log_prob(std::vector<T__>& params_r__,
147:                  std::vector<int>& params_i__,
148:                  std::ostream* pstream__ = 0) const {
149: 
150:         typedef T__ local_scalar_t__;
151: 
152:         local_scalar_t__ DUMMY_VAR__(std::numeric_limits<double>::quiet_NaN());
153:         (void) DUMMY_VAR__;  // dummy to suppress unused var warning
154: 
155:         T__ lp__(0.0);
156:         stan::math::accumulator<T__> lp_accum__;
157:         try {
158:             stan::io::reader<local_scalar_t__> in__(params_r__, params_i__);
159: 
160:             // model parameters
161:             current_statement_begin__ = 1;
162:             local_scalar_t__ y;
163:             (void) y;  // dummy to suppress unused var warning
164:             if (jacobian__)
165:                 y = in__.scalar_constrain(lp__);
166:             else
167:                 y = in__.scalar_constrain();
168: 
169:             // model body
170: 
171:             current_statement_begin__ = 1;
172:             lp_accum__.add(normal_log<propto__>(y, y_mean, 1));
173: 
174:         } catch (const std::exception& e) {
175:             stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__());
176:             // Next line prevents compiler griping about no return
177:             throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***");
178:         }
179: 
180:         lp_accum__.add(lp__);
181:         return lp_accum__.sum();
182: 
183:     } // log_prob()
184: 
185:     template <bool propto, bool jacobian, typename T_>
186:     T_ log_prob(Eigen::Matrix<T_,Eigen::Dynamic,1>& params_r,
187:                std::ostream* pstream = 0) const {
188:       std::vector<T_> vec_params_r;
189:       vec_params_r.reserve(params_r.size());
190:       for (int i = 0; i < params_r.size(); ++i)
191:         vec_params_r.push_back(params_r(i));
192:       std::vector<int> vec_params_i;
193:       return log_prob<propto,jacobian,T_>(vec_params_r, vec_params_i, pstream);
194:     }
195: 
196: 
197:     void get_param_names(std::vector<std::string>& names__) const {
198:         names__.resize(0);
199:         names__.push_back("y");
200:     }
201: 
202: 
203:     void get_dims(std::vector<std::vector<size_t> >& dimss__) const {
204:         dimss__.resize(0);
205:         std::vector<size_t> dims__;
206:         dims__.resize(0);
207:         dimss__.push_back(dims__);
208:     }
209: 
210:     template <typename RNG>
211:     void write_array(RNG& base_rng__,
212:                      std::vector<double>& params_r__,
213:                      std::vector<int>& params_i__,
214:                      std::vector<double>& vars__,
215:                      bool include_tparams__ = true,
216:                      bool include_gqs__ = true,
217:                      std::ostream* pstream__ = 0) const {
218:         typedef double local_scalar_t__;
219: 
220:         vars__.resize(0);
221:         stan::io::reader<local_scalar_t__> in__(params_r__, params_i__);
222:         static const char* function__ = "model27ae3269d9a77_16a540c6086086816528e4524def24d9_namespace::write_array";
223:         (void) function__;  // dummy to suppress unused var warning
224: 
225:         // read-transform, write parameters
226:         double y = in__.scalar_constrain();
227:         vars__.push_back(y);
228: 
229:         double lp__ = 0.0;
230:         (void) lp__;  // dummy to suppress unused var warning
231:         stan::math::accumulator<double> lp_accum__;
232: 
233:         local_scalar_t__ DUMMY_VAR__(std::numeric_limits<double>::quiet_NaN());
234:         (void) DUMMY_VAR__;  // suppress unused var warning
235: 
236:         if (!include_tparams__ && !include_gqs__) return;
237: 
238:         try {
239:             if (!include_gqs__ && !include_tparams__) return;
240:             if (!include_gqs__) return;
241:         } catch (const std::exception& e) {
242:             stan::lang::rethrow_located(e, current_statement_begin__, prog_reader__());
243:             // Next line prevents compiler griping about no return
244:             throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***");
245:         }
246:     }
247: 
248:     template <typename RNG>
249:     void write_array(RNG& base_rng,
250:                      Eigen::Matrix<double,Eigen::Dynamic,1>& params_r,
251:                      Eigen::Matrix<double,Eigen::Dynamic,1>& vars,
252:                      bool include_tparams = true,
253:                      bool include_gqs = true,
254:                      std::ostream* pstream = 0) const {
255:       std::vector<double> params_r_vec(params_r.size());
256:       for (int i = 0; i < params_r.size(); ++i)
257:         params_r_vec[i] = params_r(i);
258:       std::vector<double> vars_vec;
259:       std::vector<int> params_i_vec;
260:       write_array(base_rng, params_r_vec, params_i_vec, vars_vec, include_tparams, include_gqs, pstream);
261:       vars.resize(vars_vec.size());
262:       for (int i = 0; i < vars.size(); ++i)
263:         vars(i) = vars_vec[i];
264:     }
265: 
266:     std::string model_name() const {
267:         return "model27ae3269d9a77_16a540c6086086816528e4524def24d9";
268:     }
269: 
270: 
271:     void constrained_param_names(std::vector<std::string>& param_names__,
272:                                  bool include_tparams__ = true,
273:                                  bool include_gqs__ = true) const {
274:         std::stringstream param_name_stream__;
275:         param_name_stream__.str(std::string());
276:         param_name_stream__ << "y";
277:         param_names__.push_back(param_name_stream__.str());
278: 
279:         if (!include_gqs__ && !include_tparams__) return;
280: 
281:         if (include_tparams__) {
282:         }
283: 
284:         if (!include_gqs__) return;
285:     }
286: 
287: 
288:     void unconstrained_param_names(std::vector<std::string>& param_names__,
289:                                    bool include_tparams__ = true,
290:                                    bool include_gqs__ = true) const {
291:         std::stringstream param_name_stream__;
292:         param_name_stream__.str(std::string());
293:         param_name_stream__ << "y";
294:         param_names__.push_back(param_name_stream__.str());
295: 
296:         if (!include_gqs__ && !include_tparams__) return;
297: 
298:         if (include_tparams__) {
299:         }
300: 
301:         if (!include_gqs__) return;
302:     }
303: 
304: }; // model
305: 
306: }  // namespace
307: 
308: typedef model27ae3269d9a77_16a540c6086086816528e4524def24d9_namespace::model27ae3269d9a77_16a540c6086086816528e4524def24d9 stan_model;
309: 
310: #ifndef USING_R
311: 
312: stan::model::model_base& new_model(
313:         stan::io::var_context& data_context,
314:         unsigned int seed,
315:         std::ostream* msg_stream) {
316:   stan_model* m = new stan_model(data_context, seed, msg_stream);
317:   return *m;
318: }
319: 
320: #endif
321: 
322: 
323: 
324: #include <rstan_next/stan_fit.hpp>
325: 
326: struct stan_model_holder {
327:     stan_model_holder(rstan::io::rlist_ref_var_context rcontext,
328:                       unsigned int random_seed)
329:     : rcontext_(rcontext), random_seed_(random_seed)
330:      {
331:      }
332: 
333:    //stan::math::ChainableStack ad_stack;
334:    rstan::io::rlist_ref_var_context rcontext_;
335:    unsigned int random_seed_;
336: };
337: 
338: Rcpp::XPtr<stan::model::model_base> model_ptr(stan_model_holder* smh) {
339:   Rcpp::XPtr<stan::model::model_base> model_instance(new stan_model(smh->rcontext_, smh->random_seed_), true);
340:   return model_instance;
341: }
342: 
343: Rcpp::XPtr<rstan::stan_fit_base> fit_ptr(stan_model_holder* smh) {
344:   return Rcpp::XPtr<rstan::stan_fit_base>(new rstan::stan_fit(model_ptr(smh), smh->random_seed_), true);
345: }
346: 
347: std::string model_name(stan_model_holder* smh) {
348:   return model_ptr(smh).get()->model_name();
349: }
350: 
351: RCPP_MODULE(stan_fit4model27ae3269d9a77_16a540c6086086816528e4524def24d9_mod){
352:   Rcpp::class_<stan_model_holder>("stan_fit4model27ae3269d9a77_16a540c6086086816528e4524def24d9")
353:   .constructor<rstan::io::rlist_ref_var_context, unsigned int>()
354:   .method("model_ptr", &model_ptr)
355:   .method("fit_ptr", &fit_ptr)
356:   .method("model_name", &model_name)
357:   ;
358: }
359: 
360: 
361: // declarations
362: extern "C" {
363: SEXP file27ae339091edc( ) ;
364: }
365: 
366: // definition
367: SEXP file27ae339091edc() {
368:  return Rcpp::wrap("16a540c6086086816528e4524def24d9");
369: }

Compilation ERROR, function(s)/method(s) not created!
Error in compileCode(f, code, language = language, verbose = verbose) : 
    650 |   return internal::first_aligned<int(unpacket_traits<DefaultPacketType>::alignment),Derived>(m);      |                                                                          ^~~~~~~~~/usr/bin/ld: /usr/local/lib/R/site-library/rstan/lib//libStanServices.a(stan_fit.o): réadressage R_X86_64_PC32 vers non défini symbole caché « _ZTCN5boost10wrapexceptISt12domain_errorEE0_NS_16exception_detail10clone_implINS3_19error_info_injectorIS1_EEEE » ne peut pas être utilisé en créant un objet partagé/usr/bin/ld : échec de l'édition de liens finale : mauvaise valeurcollect2: error: ld returned 1 exit statusmake: *** [/usr/share/R/share/make/shlib.mk:10 : file27ae339091edc.so] Erreur 1
> 
1 Like

Sorry for not getting to you earlier.
Unfortunately I am not a Linux user, maybe @rok_cesnovar can help?

The only advice I can give is that the CmdStanR interface (still in beta but already quite stable) is partially an answer to problems like this as it is easier to install and has a lot code to help you resolve issues, see: Getting started with CmdStanR • cmdstanr

You can use brms with CmdStanR by settign options(brms.backend = "cmdstanr").

Best of luck with installing

Thanks. That was quite helpful : I am indeed able to use brms (via cmdstanr) again. But not rstan.

But it’s still unsatisfactory :

  • this solution relies on beta software, and implies a manual compilation of cmdstan. Not that hard, but not totally trivial either.

  • cmdstanr relies on using somehow the source directory for cmdstan (I checked that copying the binaries somewher in the PATH and pointing cmdstanr to it is unsufficient).

  • In its present state, this solution cannot be packaged for “systemwide” installation. Therefore, the programs (or literate programing" documents) using it can’t be really reproduced on another machine, this not fully portable.

  • cmdstanr offers an interface quite different from rstan ; programs or documents using it require quite a bit of re-writing. Since brms has integrated these differences well enough to offer an uniform interface whatever its backend is used, the same should be possible for rstan, but is not present yet.

Therefore, until this new compiler becomes standard, fixing the current problem of rstan (and of rstan-using brms) is highly desirable. Do you have suggestions on how to report this problem in a way ensuring some attention of a Linux developper ?

BTW, I was impressed by the speed of this new compiler, which should relieve the compilation time problem observed with the old compiler.

Have you updated your machine recently?
I ask, because I’m on Arch, recently updated, and something about V8 broke. I needed to reinstall the R V8 package, then continue onto recompiling StanHeaders and rstan (not 100% sure this was required, but worth doing).

I would try the following:

install.packages("V8")
install.packages("StanHeaders")
install.packages("rstan")

In that order (not all at once).

Not sure what is going on here, but assuming you did not change your C++ compiler, you probably installed a new version of another package and I would recommend reinstalling StanHeaders and rstan as @Stephen_Martin suggests. Given that cmdstanr works, the installed toolchain should suffice for rstan as well.

To avoid any confusion and spread of misinformation to anyone reading this thread in the future allow me to clarify a few things.

These comments are not to persuade you to switch to cmdstanr, I understand and agree on the comments that its beta software and would require rewriting your scripts that rely on rstan. Hopefully we can make it work on your system.

When you are using Linux you build rstan from source as well. On Windows/Mac rstan can be installed in binary form, but that only saves a bit of time on installation, users still need the entire C++ toolchain to compile models when using it.

You can use cmdstanr::install_cmdstan() to build cmdstan. The prerequisites for running that are the same as for building models or building models in rstan (a suitable C++ compiler and make).

At least when using brms, the models are compiled at runtime, so this behavior is no different in rstan. If a script involves running brms, the models are compiled from source for each system. You similarly can not just copy built rstan binaries to any system and expect them to run.

Unfortunately, the speedup does not come form the new Stan-to-C++ compiler, rather from the way cmdstan compiles Stan models. Compile times in the experimental rstan 2.26.1 are on par with the 2.21 version.

1 Like

Have you updated your machine recently?

Yes : updating Debian’s testing is important. I do that (almost) daily.

I would try the following:

install.packages("V8")
install.packages("StanHeaders")
install.packages("rstan")

In that order (not all at once).

That worked. To my utmost surprise (the packages’ versions were the same before and after reinstallation). Both rstan and brms are unwedged…

This kind of black magic wouldn’t have crossed my mind… Next time, I’ll try to sacrifice a black goat at midnight under a full moon…

Do you have suggestions about where and how to report this ? This is not an acceptable behavior and should be fixed.

There’s nothing to report. This is common, and expected in linux distributions when using system packages.

In windows and osx, most apps bundle their dependencies with themselves.

In linux, most packages (i.e., not snap, flatpak, etc, but rather package-manager-managed packages) rely on common system libraries to link to and expect at runtime.

When, e.g., Debian updates certain packages (maybe Boost? Maybe Node or your V8 system lib), then there is an ABI mismatch between rstan, StanHeaders, and/or V8 and the new, updated system packages.

So when you update system packages, that can sometimes ‘break’ R packages that depend on compiled system binaries.

It’s not really Debian’s fault. It’s not really the Stan team’s fault. It’s just the way it works. Nothing to report.

3 Likes