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.