Rainer M Krug wrote:
Hi

I managed to compile (and use) C code from R, but now I have to use C++ code.
After reading "Writing R extensions", I came up with the following
code, which compiles fine

-------------------
// emdL1_R.cc:

#include <time.h>
#include <stdio.h>
#include "emdL1.h"

extern "C"
{
  void emd_L1(
              double *H1, int *n1,
              double *H2, int *n2,
              int *Dims,
              double *e
              )
  {
    EmdL1 em;                   // EMD_L1 class

    e[0] = em.EmdDist( H1,H2, n1[0],n2[0], Dims[0]);                    // 2D 
EMD_L1

    printf("For 2D histograms,  EmdL1(h1,h2)=%lf\n", e[0]);
  }
}// extern "C"
-------------------
-------------------
Compilation started at Wed Nov 19 14:30:42

R CMD SHLIB emdL1.cpp emdL1_R.cc
g++ -I/usr/share/R/include      -fpic  -g -O2 -c emdL1.cpp -o emdL1.o
g++ -I/usr/share/R/include      -fpic  -g -O2 -c emdL1_R.cc -o emdL1_R.o
g++ -shared  -o emdL1.so emdL1.o emdL1_R.o   -L/usr/lib/R/lib -lR

Compilation finished at Wed Nov 19 14:30:44

Compilation started at Wed Nov 19 14:37:12

R CMD SHLIB emdL1_R.cc
g++ -shared  -o emdL1_R.so emdL1_R.o   -L/usr/lib/R/lib -lR



You should compile all the files into one single .so
So use the first call to R CMD SHLIB, i.e. (with the order
of the files switched)

  R CMD SHLIB emdL1_R.cc emdL1_R.cc

and then in R

  dyn.load("emdL1_R.so")

should work.

The problem was that in the second SHLIB call,
you compiled and linked emdL1_R.cc into emdL1_R.so but didn't
include the emdL1.cc file which contains the classes and routines you
refer to in emdL1_R.cc

 D.





Compilation finished at Wed Nov 19 14:37:12
-------------------

 but when I want to load the resulting .so file (emdL1_R.so), I get
the following error message:

-------------------
dyn.load("emdL1_R.so")
Error in dyn.load("emdL1_R.so") :
  unable to load shared library
'/home/rkrug/Documents/Projects/EMD/EmdL1_vs/emdL1_R.so':
  /home/rkrug/Documents/Projects/EMD/EmdL1_vs/emdL1_R.so: undefined
symbol: _ZN5EmdL1D1Ev
-------------------


The two other files (emdL1.h and emdL1.cpp) are in the following zip file:

http://vision.ucla.edu/~hbling/code/EmdL1_v2.zip


Any suggestions are welcome,

Rainer





______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to