Error in compileCode(f, code, language = language, verbose = verbose) : Compilation ERROR, function(s)/method(s) not created! Again

I seem to be far from the first person to run into this type of error when getting rstan up and running for the first time, but after reinstalling rstan several times and making sure that both R and rstan are installed on my C:\ drive I am unsure where to go to continue troubleshooting this error. My apologies if I have missed an obvious solution previously posted. Here is the error message I get when I try and run the simple 8 schools model from the installation tutorial:

Error in compileCode(f, code, language = language, verbose = verbose) : 
  Compilation ERROR, function(s)/method(s) not created! C:/RBUILD~1/4.0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: file3438dfd7e9c.o:file3438dfd7e9c.cpp:(.text+0x11dc): undefined reference to `rstan::stan_fit::stan_fit(SEXPREC*, int)'
C:/RBUILD~1/4.0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: file3438dfd7e9c.o:file3438dfd7e9c.cpp:(.text$_ZN3tbb8internal26task_scheduler_observer_v3D1Ev[_ZN3tbb8internal26task_scheduler_observer_v3D1Ev]+0x14): undefined reference to `tbb::internal::task_scheduler_observer_v3::observe(bool)'
C:/RBUILD~1/4.0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: file3438dfd7e9c.o:file3438dfd7e9c.cpp:(.text$_ZN3tbb8internal26task_scheduler_observer_v3D0Ev[_ZN3tbb8internal26task_scheduler_observer_v3D0Ev]+0x1c): undefined reference to `tbb::internal::task_scheduler_observer_v3::observe(bool)'
C:/RBUILD~1/4.0/mingw64/bin/.
In addition: Warning messages:
1: In readLines(file, warn = TRUE) :
  incomplete final line found on 'C:\Users\matth\Documents\College Work\FunStats\usgs_gages_proj\Testing\schools.stan'
2: In file.remove(c(unprocessed, processed)) :
  cannot remove file 'C:\Users\matth\AppData\Local\Temp\RtmpCWBON7\file34382d5c18b4.stan', reason 'No such file or directory'
Error in sink(type = "output") : invalid connection

And here is my sessionINFO()

R version 4.0.2 (2020-06-22)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 18363)

Matrix products: default

locale:
[1] LC_COLLATE=English_United States.1252 
[2] LC_CTYPE=English_United States.1252   
[3] LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C                          
[5] LC_TIME=English_United States.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets 
[6] methods   base     

other attached packages:
[1] rstan_2.21.1         ggplot2_3.3.2       
[3] StanHeaders_2.21.0-5

loaded via a namespace (and not attached):
 [1] Rcpp_1.0.5         pillar_1.4.4      
 [3] compiler_4.0.2     prettyunits_1.1.1 
 [5] remotes_2.1.1      tools_4.0.2       
 [7] pkgbuild_1.0.8     jsonlite_1.7.0    
 [9] lifecycle_0.2.0    tibble_3.0.2      
[11] gtable_0.3.0       pkgconfig_2.0.3   
[13] rlang_0.4.6        cli_2.0.2         
[15] rstudioapi_0.11    parallel_4.0.2    
[17] curl_4.3           loo_2.3.0         
[19] gridExtra_2.3      withr_2.2.0       
[21] dplyr_1.0.0        generics_0.0.2    
[23] vctrs_0.3.1        stats4_4.0.2      
[25] grid_4.0.2         tidyselect_1.1.0  
[27] glue_1.4.1         inline_0.3.15     
[29] R6_2.4.1           processx_3.4.3    
[31] fansi_0.4.1        purrr_0.3.4       
[33] callr_3.4.3        magrittr_1.5      
[35] codetools_0.2-16   matrixStats_0.56.0
[37] scales_1.1.1       ps_1.3.3          
[39] ellipsis_0.3.1     assertthat_0.2.1  
[41] colorspace_1.4-1   V8_3.2.0          
[43] RcppParallel_5.0.2 munsell_0.5.0     
[45] crayon_1.3.4 

Operating System: Windows 10
Interface Version: 2.19.2
Compiler/Toolkit: rstan/rstudio

Do you have the RcppParallel package installed?

I believe I do, yes

Can you do

example(stan_model, package = "rstan", run.dontrun = TRUE)

and tell us the part of the output following “Compilation argument”?

I don’t think I was able to generate the output you are looking for, or I am simply not looking at the right part of what printed in my console. I got another series of errors:

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 model343816169e4_73fc79f8b1915e8208c736914c86d1a1_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", "model343816169e4_73fc79f8b1915e8208c736914c86d1a1");
 32:     reader.add_event(3, 1, "end", "model343816169e4_73fc79f8b1915e8208c736914c86d1a1");
 33:     return reader;
 34: }
 35: 
 36: class model343816169e4_73fc79f8b1915e8208c736914c86d1a1
 37:   : public stan::model::model_base_crtp<model343816169e4_73fc79f8b1915e8208c736914c86d1a1> {
 38: private:
 39:         double y_mean;
 40: public:
 41:     model343816169e4_73fc79f8b1915e8208c736914c86d1a1(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:     model343816169e4_73fc79f8b1915e8208c736914c86d1a1(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__ = "model343816169e4_73fc79f8b1915e8208c736914c86d1a1_namespace::model343816169e4_73fc79f8b1915e8208c736914c86d1a1";
 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:     ~model343816169e4_73fc79f8b1915e8208c736914c86d1a1() { }
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__ = "model343816169e4_73fc79f8b1915e8208c736914c86d1a1_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 "model343816169e4_73fc79f8b1915e8208c736914c86d1a1";
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 model343816169e4_73fc79f8b1915e8208c736914c86d1a1_namespace::model343816169e4_73fc79f8b1915e8208c736914c86d1a1 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_fit4model343816169e4_73fc79f8b1915e8208c736914c86d1a1_mod){
352:   Rcpp::class_<stan_model_holder>("stan_fit4model343816169e4_73fc79f8b1915e8208c736914c86d1a1")
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 file34383b8418a0( ) ;
364: }
365: 
366: // definition
367: 
368: SEXP file34383b8418a0(  ){
369:  return Rcpp::wrap("73fc79f8b1915e8208c736914c86d1a1");
370: }
371: 
372: 
Error in compileCode(f, code, language = language, verbose = verbose) : 
  Compilation ERROR, function(s)/method(s) not created! C:/RBUILD~1/4.0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: file34383b8418a0.o:file34383b8418a0.cpp:(.text+0x119c): undefined reference to `rstan::stan_fit::stan_fit(SEXPREC*, int)'
C:/RBUILD~1/4.0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: file34383b8418a0.o:file34383b8418a0.cpp:(.text$_ZN3tbb8internal26task_scheduler_observer_v3D1Ev[_ZN3tbb8internal26task_scheduler_observer_v3D1Ev]+0x14): undefined reference to `tbb::internal::task_scheduler_observer_v3::observe(bool)'
C:/RBUILD~1/4.0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: file34383b8418a0.o:file34383b8418a0.cpp:(.text$_ZN3tbb8internal26task_scheduler_observer_v3D0Ev[_ZN3tbb8internal26task_scheduler_observer_v3D0Ev]+0x1c): undefined reference to `tbb::internal::task_scheduler_observer_v3::observe(bool)'
C:/RBUILD~1/4.0/mingw64
In addition: Warning message:
In file.remove(c(unprocessed, processed)) :
  cannot remove file 'C:\Users\matth\AppData\Local\Temp\RtmpCWBON7\file34387f7f81b.stan', reason 'No such file or directory'

If you scroll up, there will be a line that says “Compilation argument:” and we need the part of the output right after that.

Ah I see, my apologies for the confusion. Rstudio was cutting off the part of the console with the relevant information dumping them into a text file worked out well. Thanks for your patience

Compilation argument:
 C:/PROGRA~1/R/R-40~1.2/bin/x64/R CMD SHLIB file34382c6a4fb8.cpp 2> file34382c6a4fb8.cpp.err.txt 
C:/RBUILD~1/4.0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: file34382c6a4fb8.o:file34382c6a4fb8.cpp:(.text+0x119c): undefined reference to `rstan::stan_fit::stan_fit(SEXPREC*, int)'
C:/RBUILD~1/4.0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: file34382c6a4fb8.o:file34382c6a4fb8.cpp:(.text$_ZN3tbb8internal26task_scheduler_observer_v3D1Ev[_ZN3tbb8internal26task_scheduler_observer_v3D1Ev]+0x14): undefined reference to `tbb::internal::task_scheduler_observer_v3::observe(bool)'
C:/RBUILD~1/4.0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: file34382c6a4fb8.o:file34382c6a4fb8.cpp:(.text$_ZN3tbb8internal26task_scheduler_observer_v3D0Ev[_ZN3tbb8internal26task_scheduler_observer_v3D0Ev]+0x1c): undefined reference to `tbb::internal::task_scheduler_observer_v3::observe(bool)'
C:/RBUILD~1/4.0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: file34382c6a4fb8.o:file34382c6a4fb8.cpp:(.text$_ZN4stan4math16ad_tape_observerD1Ev[_ZN4stan4math16ad_tape_observerD1Ev]+0x15): undefined reference to `tbb::internal::task_scheduler_observer_v3::observe(bool)'
C:/RBUILD~1/4.0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: file34382c6a4fb8.o:file34382c6a4fb8.cpp:(.text$_ZN4stan4math16ad_tape_observerD1Ev[_ZN4stan4math16ad_tape_observerD1Ev]+0x47): undefined reference to `tbb::internal::task_scheduler_observer_v3::observe(bool)'
C:/RBUILD~1/4.0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: file34382c6a4fb8.o:file34382c6a4fb8.cpp:(.text$_ZN4stan4math16ad_tape_observerD0Ev[_ZN4stan4math16ad_tape_observerD0Ev]+0x15): undefined reference to `tbb::internal::task_scheduler_observer_v3::observe(bool)'
C:/RBUILD~1/4.0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: file34382c6a4fb8.o:file34382c6a4fb8.cpp:(.text$_ZN4stan4math16ad_tape_observerD0Ev[_ZN4stan4math16ad_tape_observerD0Ev]+0x42): more undefined references to `tbb::internal::task_scheduler_observer_v3::observe(bool)' follow
collect2.exe: error: ld returned 1 exit status

I’m also having a similar issue with Windows and R4.0.2, Rtools4:

> mod = "data{real y_mean;} parameters{real y;} model{y ~ normal(y_mean,1);}"

> t = rstan::stan(model_code = mod,data=list(y_mean=0))
The NEXT version of Stan will not be able to pre-process your Stan program.
Please open an issue at
 https://github.com/stan-dev/stanc3/issues 
if you can share or at least describe your Stan program. This will help ensure that Stan
continues to work on your Stan programs in the future. Thank you!
This message can be avoided by wrapping your function call inside suppressMessages().
Error in compileCode(f, code, language = language, verbose = verbose) : 
  Compilation ERROR, function(s)/method(s) not created! C:/rtools40/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: file10104ab33b49.o:file10104ab33b49.cpp:(.text+0x124c): undefined reference to `rstan::stan_fit::stan_fit(SEXPREC*, int)'
C:/rtools40/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: file10104ab33b49.o:file10104ab33b49.cpp:(.text$_ZN3tbb8internal26task_scheduler_observer_v3D1Ev[_ZN3tbb8internal26task_scheduler_observer_v3D1Ev]+0x14): undefined reference to `tbb::internal::task_scheduler_observer_v3::observe(bool)'
C:/rtools40/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: file10104ab33b49.o:file10104ab33b49.cpp:(.text$_ZN3tbb8internal26task_scheduler_observer_v3D0Ev[_ZN3tbb8internal26task_scheduler_observer_v3D0Ev]+0x1c): undefined reference to `tbb::internal::task_scheduler_observer_v3::observe(bool)'
C:/rtools40/mingw64/bin/../lib/gcc/
In addition: Warning message:
In file.remove(c(unprocessed, processed)) :
  cannot remove file 'C:\Users\ANDREW~1\AppData\Local\Temp\Rtmp8Cf9YU\file10108f12f20.stan', reason 'No such file or directory'
Error in sink(type = "output") : invalid connection

With compilation argument:

Compilation argument:
 C:/PROGRA~1/R/R-40~1.2/bin/x64/R CMD SHLIB file1010abd4529.cpp 2> file1010abd4529.cpp.err.txt 
"C:/rtools40/mingw64/bin/"g++  -std=gnu++14 -I"C:/PROGRA~1/R/R-40~1.2/include" -DNDEBUG   -I"C:/Users/Andrew Johnson/Documents/R/win-library/4.0/Rcpp/include/"  -I"C:/Users/Andrew Johnson/Documents/R/win-library/4.0/RcppEigen/include/"  -I"C:/Users/Andrew Johnson/Documents/R/win-library/4.0/RcppEigen/include/unsupported"  -I"C:/Users/Andrew Johnson/Documents/R/win-library/4.0/BH/include" -I"C:/Users/Andrew Johnson/Documents/R/win-library/4.0/StanHeaders/include/src/"  -I"C:/Users/Andrew Johnson/Documents/R/win-library/4.0/StanHeaders/include/"  -I"C:/Users/Andrew Johnson/Documents/R/win-library/4.0/RcppParallel/include/"  -I"C:/Users/Andrew Johnson/Documents/R/win-library/4.0/rstan/include" -DEIGEN_NO_DEBUG  -DBOOST_DISABLE_ASSERTS  -DBOOST_PENDING_INTEGER_LOG2_HPP  -DSTAN_THREADS  -DBOOST_NO_AUTO_PTR  -include "C:/Users/Andrew Johnson/Documents/R/win-library/4.0/StanHeaders/include/stan/math/prim/mat/fun/Eigen.hpp"  -std=c++1y    -march=core2     -O2 -Wall  -mfpmath=sse -msse2 -mstackrealign -O3 -march=native -mtune=native -Wno-deprecated-declarations -Wno-unused-function -Wno-ignored-attributes -Wno-parentheses -Wno-sign-compare -Wno-attributes -Wno-int-in-bool-context -Wno-unused-local-typedefs -Wno-unused-but-set-variable -c file1010abd4529.cpp -o file1010abd4529.o

and session info:

> sessionInfo()
R version 4.0.2 (2020-06-22)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 19041)

Matrix products: default

locale:
[1] LC_COLLATE=English_Australia.1252  LC_CTYPE=English_Australia.1252    LC_MONETARY=English_Australia.1252
[4] LC_NUMERIC=C                       LC_TIME=English_Australia.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

loaded via a namespace (and not attached):
 [1] Rcpp_1.0.5           compiler_4.0.2       pillar_1.4.4         prettyunits_1.1.1    tools_4.0.2         
 [6] pkgbuild_1.0.8       jsonlite_1.7.0       lifecycle_0.2.0      tibble_3.0.2         gtable_0.3.0        
[11] pkgconfig_2.0.3      rlang_0.4.6          cli_2.0.2            rstudioapi_0.11      parallel_4.0.2      
[16] curl_4.3             yaml_2.2.1           loo_2.3.0            gridExtra_2.3        withr_2.2.0         
[21] dplyr_1.0.0          generics_0.0.2       vctrs_0.3.1          tidyselect_1.1.0     stats4_4.0.2        
[26] grid_4.0.2           glue_1.4.1           inline_0.3.15        R6_2.4.1             processx_3.4.3      
[31] fansi_0.4.1          rstan_2.21.1         purrr_0.3.4          ggplot2_3.3.2        callr_3.4.3         
[36] magrittr_1.5         codetools_0.2-16     matrixStats_0.56.0   scales_1.1.1         ps_1.3.3            
[41] StanHeaders_2.21.0-5 ellipsis_0.3.1       assertthat_0.2.1     colorspace_1.4-1     V8_3.2.0            
[46] RcppParallel_5.0.2   munsell_0.5.0        crayon_1.3.4      

I’ve also tried reinstalling RStan, StanHeaders, and RcppParallel from source, with no change unfortunately

What is the linker line right after that?

C:/rtools40/mingw64/bin/g++ -shared -s -static-libgcc -o file1010253405d.dll tmp.def file1010253405d.o -LC:/PROGRA~1/R/R-40~1.2/bin/x64 -lR

Do you have any idea why

is not getting to the linker call down on line 120?

That’s a weird one, since the PKG_LIBS variable is getting set correctly:

COMPILING THE C++ CODE FOR MODEL '103122cd9a35797f91d8eef03ce131e0' NOW.
OS: x86_64, mingw32; rstan: 2.21.1; Rcpp: 1.0.5; inline: 0.3.15 
 >> setting environment variables: 
PKG_LIBS =  C:/R/win-library/4.0/rstan/lib/x64/libStanServices.a -L"C:/R/win-library/4.0/StanHeaders/libs/x64" -lStanHeaders -L"C:/R/win-library/4.0/RcppParallel/lib/x64" -ltbb
PKG_CPPFLAGS =   -I"C:/R/win-library/4.0/Rcpp/include/"  -I"C:/R/win-library/4.0/RcppEigen/include/"  -I"C:/R/win-library/4.0/RcppEigen/include/unsupported"  -I"C:/R/win-library/4.0/BH/include" -I"C:/R/win-library/4.0/StanHeaders/include/src/"  -I"C:/R/win-library/4.0/StanHeaders/include/"  -I"C:/R/win-library/4.0/RcppParallel/include/"  -I"C:/R/win-library/4.0/rstan/include" -DEIGEN_NO_DEBUG  -DBOOST_DISABLE_ASSERTS  -DBOOST_PENDING_INTEGER_LOG2_HPP  -DSTAN_THREADS  -DBOOST_NO_AUTO_PTR  -include "C:/R/win-library/4.0/StanHeaders/include/stan/math/prim/mat/fun/Eigen.hpp"  -std=c++1y

What happens if you first do a

Sys.setenv(LOCAL_LIBS = 'C:/R/win-library/4.0/rstan/lib/x64/libStanServices.a -L"C:/R/win-library/4.0/StanHeaders/libs/x64" -lStanHeaders -L"C:/R/win-library/4.0/RcppParallel/lib/x64" -ltbb')

?

Yep that did the trick. What’s a good way to get users to implement this? Add to .Renviron?

Well, that is not a real solution. We need to figure out why when the same thing was specified as PKG_LIBS it was not getting picked up.

Just chiming in to say that reverting to 2.19.3 by reinstalling from CRAN rather than from the source directly as suggested in the linked thread also addressed my issues for the time being. Thanks to all for the help

@bgoodri that ‘fix’ was successful in resolving one error message for me, but that was simply replaced by:

Error in compileCode(f, code, language = language, verbose = verbose) :
Compilation ERROR, function(s)/method(s) not created! g++.exe: error: C:/R/win-library/4.0/rstan/lib/x64/libStanServices.a: No such file or directory

The same models work fine when compiled as part of a package.

What is

dir(system.file("lib", package = "rstan"), recursive = TRUE, full.names = TRUE)

?

I mean from R