[R] Compiling third party C++ libraries

Samuel Kemp sam.kemp2 at ntlworld.com
Thu Feb 26 19:08:02 CET 2004


Hi,

Does anyone know how to compile C++ code that uses 3rd party C++ 
libraries, so that the .so file can be used in R?

I keep getting errors when using dyn.load which say undefined reference 
to KdSpiltRule, which is in my third party library.

Here is the entire code......

// Computes a rapid Gamma test using ANN (Approximate Near Neighbour) 
library

#include <stdio.h>                                                    
                    // C I/O
#include <string.h>                                                    
                    // string manipulation
#include <math.h>                                                        
                // math routines
#include "/home/sekemp/ann_0.2/include/ANN/ANN.h"            // ANN 
declarations

extern "C"
{
void rapidGammaTest(double *inputs, double *outputs, int *dim, int 
*n_pts, int *k, double *sum)
{
    ANNpointArray    data_pts;        // data points
    ANNpoint                query_pt;        // query point
    ANNidxArray        nn_idx;            // near neighbor indices
    ANNdistArray        dists;            // near neighbor distances
    ANNkd_tree        *the_tree;        // search structure

    query_pt = annAllocPt(*dim);            // allocate query point
    data_pts = annAllocPts(*n_pts, *dim);        // allocate data points
    nn_idx = new ANNidx[*k];            // allocate near neigh indices
    dists = new ANNdist[*k];            // allocate near neighbor dists
   
    int inc = 0;
    for(int i = 0; i < *n_pts; i++)
    {
        ANNpoint p;
        for(int j = 0; j < *dim; j++)
        {
            p[j] = inputs[inc];
            inc++;
        }
        data_pts[i] = p;
    }
   
    int bs    =    32;
    int M      = *n_pts;
    int n_NN         = *k;
    the_tree = new ANNkd_tree(        // build search structure
            data_pts,                                // the data points
            M,                                        // number of points
            n_NN,                                    // dimension of space
            bs);                                        // bucket size
   
    for(int t = 0; t < n_NN; t++)
    {
        sum[t] = 0.00;
    }
   
    for(int j = 0; j < M; j++)
    {
        the_tree->annkSearch(            // search
                        data_pts[j],                    // query point
                        n_NN,                                // number 
of near neighbors
                        nn_idx,                        // nearest 
neighbors (returned)
                         dists);                        // distance 
(returned)

        for (int g = 0; g < n_NN; g++)
        {
                sum[g] += pow(sqrt(dists[g]), 2);
        }
    }
}
}




More information about the R-help mailing list