[Rcpp-devel] Compiler errors with RcppGSL

Devin Heer devin.heer at gmail.com
Wed Nov 12 15:13:14 CET 2014


Hello

I am trying to translate one R function into C++ by using Rcpp. This
function makes use of hyperg_2F1 from the gsl package.
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).

For test purposes, I try to compile the following (copied from r-bloggers):

// [[Rcpp::depends(RcppGSL)]]
#include <RcppGSL.h>

#include <gsl/gsl_bspline.h>
#include <gsl/gsl_multifit.h>
#include <gsl/gsl_rng.h>
#include <gsl/gsl_randist.h>
#include <gsl/gsl_statistics.h>

const int N = 200;                              // number of data points to
fit
const int NCOEFFS = 12;                         // number of fit
coefficients */
const int NBREAK = (NCOEFFS - 2);               // nbreak = ncoeffs + 2 - k
= ncoeffs - 2 since k = 4 */

// [[Rcpp::export]]
Rcpp::List genData() {

    const size_t n = N;
    size_t i;
    double dy;
    gsl_rng *r;
    RcppGSL::vector<double> w(n), x(n), y(n);

    gsl_rng_env_setup();
    r = gsl_rng_alloc(gsl_rng_default);

    //printf("#m=0,S=0\n");
    /* this is the data to be fitted */

    for (i = 0; i < n; ++i) {
        double sigma;
        double xi = (15.0 / (N - 1)) * i;
        double yi = cos(xi) * exp(-0.1 * xi);

        sigma = 0.1 * yi;
        dy = gsl_ran_gaussian(r, sigma);
        yi += dy;

        gsl_vector_set(x, i, xi);
        gsl_vector_set(y, i, yi);
        gsl_vector_set(w, i, 1.0 / (sigma * sigma));

        //printf("%f %f\n", xi, yi);
    }

    Rcpp::DataFrame res = Rcpp::DataFrame::create(Rcpp::Named("x") = x,
                                                  Rcpp::Named("y") = y,
                                                  Rcpp::Named("w") = w);

    x.free();
    y.free();
    w.free();
    gsl_rng_free(r);

    return(res);
}


However, the error message I get when I run the command

sourceCpp("GSLtest.cpp")


is the following:

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
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
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
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
collect2: ld returned 1 exit status


What could this possibly mean and how to fix this? Or is there another way
to implement hyperg_2F1 into Rcpp?
I am working on OS Windows 8, with only beginner's knowledge of C++

Feedback is highly appreciated.

Devin
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.r-forge.r-project.org/pipermail/rcpp-devel/attachments/20141112/7faa5ea3/attachment.html>


More information about the Rcpp-devel mailing list