<div dir="ltr">Hello<div><br></div><div>I am trying to translate one R function into C++ by using Rcpp. This function makes use of <font face="monospace">hyperg_2F1</font> from the <font face="monospace">gsl</font> package.</div><div>Thus, I would really like to get the RcppGSL package up and running. I have downloaded the GSL library and saved it in the same folder where the header file Rcpp.h is located (I assume this is the default place RcppGSL is looking for header- and source files). </div><div><br></div><div>For test purposes, I try to compile the following (copied from r-bloggers):</div><div><br></div><div><div><font face="monospace">// [[Rcpp::depends(RcppGSL)]]</font></div><div><font face="monospace">#include <RcppGSL.h></font></div><div><font face="monospace"><br></font></div><div><font face="monospace">#include <gsl/gsl_bspline.h></font></div><div><font face="monospace">#include <gsl/gsl_multifit.h></font></div><div><font face="monospace">#include <gsl/gsl_rng.h></font></div><div><font face="monospace">#include <gsl/gsl_randist.h></font></div><div><font face="monospace">#include <gsl/gsl_statistics.h></font></div><div><font face="monospace"><br></font></div><div><font face="monospace">const int N = 200;                              // number of data points to fit </font></div><div><font face="monospace">const int NCOEFFS = 12;                         // number of fit coefficients */</font></div><div><font face="monospace">const int NBREAK = (NCOEFFS - 2);               // nbreak = ncoeffs + 2 - k = ncoeffs - 2 since k = 4 */</font></div><div><font face="monospace"><br></font></div><div><font face="monospace">// [[Rcpp::export]]</font></div><div><font face="monospace">Rcpp::List genData() {</font></div><div><font face="monospace"><br></font></div><div><font face="monospace">    const size_t n = N;</font></div><div><font face="monospace">    size_t i;</font></div><div><font face="monospace">    double dy;</font></div><div><font face="monospace">    gsl_rng *r;</font></div><div><font face="monospace">    RcppGSL::vector<double> w(n), x(n), y(n);</font></div><div><font face="monospace"><br></font></div><div><font face="monospace">    gsl_rng_env_setup();</font></div><div><font face="monospace">    r = gsl_rng_alloc(gsl_rng_default);</font></div><div><font face="monospace"><br></font></div><div><font face="monospace">    //printf("#m=0,S=0\n");</font></div><div><font face="monospace">    /* this is the data to be fitted */</font></div><div><font face="monospace"><br></font></div><div><font face="monospace">    for (i = 0; i < n; ++i) {</font></div><div><font face="monospace">        double sigma;</font></div><div><font face="monospace">        double xi = (15.0 / (N - 1)) * i;</font></div><div><font face="monospace">        double yi = cos(xi) * exp(-0.1 * xi);</font></div><div><font face="monospace"><br></font></div><div><font face="monospace">        sigma = 0.1 * yi;</font></div><div><font face="monospace">        dy = gsl_ran_gaussian(r, sigma);</font></div><div><font face="monospace">        yi += dy;</font></div><div><font face="monospace"><br></font></div><div><font face="monospace">        gsl_vector_set(x, i, xi);</font></div><div><font face="monospace">        gsl_vector_set(y, i, yi);</font></div><div><font face="monospace">        gsl_vector_set(w, i, 1.0 / (sigma * sigma));</font></div><div><font face="monospace">                </font></div><div><font face="monospace">        //printf("%f %f\n", xi, yi);</font></div><div><font face="monospace">    }</font></div><div><font face="monospace"><br></font></div><div><font face="monospace">    Rcpp::DataFrame res = Rcpp::DataFrame::create(Rcpp::Named("x") = x,</font></div><div><font face="monospace">                                                  Rcpp::Named("y") = y,</font></div><div><font face="monospace">                                                  Rcpp::Named("w") = w);</font></div><div><font face="monospace"><br></font></div><div><font face="monospace">    x.free();</font></div><div><font face="monospace">    y.free();</font></div><div><font face="monospace">    w.free();</font></div><div><font face="monospace">    gsl_rng_free(r);</font></div><div><font face="monospace"><br></font></div><div><font face="monospace">    return(res);</font></div><div><font face="monospace">}</font></div></div><div><br></div><div><br></div><div>However, the error message I get when I run the command</div><div><br></div><div><font face="monospace">sourceCpp("GSLtest.cpp")</font></div><div><br></div><div><br></div><div>is the following:</div><div><br></div><div><div><font face="monospace">g++ -m64 -I"C:/PROGRA~1/R/R-31~1.1/include" -DNDEBUG -I/include     -I"C:/PROGRA~1/R/R-31~1.1/library/Rcpp/include" -I"C:/PROGRA~1/R/R-31~1.1/library/RcppGSL/include"  -I"d:/RCompile/CRANpkg/extralibs64/local/include"     -O2 -Wall  -mtune=core2 -c GSLtest.cpp -o GSLtest.o</font></div><div><font face="monospace">g++ -m64 -shared -s -static-libgcc -o sourceCpp_50300.dll tmp.def GSLtest.o -L/lib -lgsl -lgslcblas -LC:/PROGRA~1/R/R-31~1.1/bin/x64 -lRlapack -LC:/PROGRA~1/R/R-31~1.1/bin/x64 -lRblas -lgfortran -Ld:/RCompile/CRANpkg/extralibs64/local/lib/x64 -Ld:/RCompile/CRANpkg/extralibs64/local/lib -LC:/PROGRA~1/R/R-31~1.1/bin/x64 -lR</font></div><div><font face="monospace">c:/rbuildtools/3.1/gcc-4.6.3/bin/../lib/gcc/i686-w64-mingw32/4.6.3/../../../../i686-w64-mingw32/bin/ld.exe: cannot find -lgsl</font></div><div><font face="monospace">c:/rbuildtools/3.1/gcc-4.6.3/bin/../lib/gcc/i686-w64-mingw32/4.6.3/../../../../i686-w64-mingw32/bin/ld.exe: cannot find -lgslcblas</font></div><div><font face="monospace">collect2: ld returned 1 exit status</font></div></div><div><br></div><div><br></div><div>What could this possibly mean and how to fix this? Or is there another way to implement <font face="monospace">hyperg_2F1</font> into Rcpp?</div><div>I am working on OS Windows 8, with only beginner's knowledge of C++</div><div><br></div><div>Feedback is highly appreciated.</div><div><br></div><div>Devin</div></div>