[Rcpp-devel] dyn.load error - symbol not found - expected in: flat namespace
Lescai, Francesco
f.lescai at ucl.ac.uk
Fri Jul 6 16:37:20 CEST 2012
Hi there,
I've seen other posts similar to this one, but I'm a complete novice in the use of Rcpp and couldn't really figure out how to solve the issue.
I'm learning how to use Rcpp before connecting R to some C++ classes I'm developing.
I started with a simple home made example, but in both cases compiling .cpp and header files or compiling inline code, I get the same outcome error "unable to load shared object" and then "Symbol not found" with some characters before and after my class name.
I've seen Mac OS might have some issues, therefore I tested it also on an Ubuntu virtual machine, but the result is the same error message.
Also, I'm using an R-devel version here but I'm having the same problem with R 14 as well.
I'll copy below all the relevant information (bit lengthy, I'm sorry).
I'd really appreciate some help here to point me in the right direction.
thanks very much,
Francesco
------case 1 - external files -------------------
PKG_CPPFLAGS=`Rscript -e 'Rcpp:::CxxFlags()'` PKG_LIBS=`Rscript -e 'Rcpp:::LdFlags()'` R CMD SHLIB example.cpp
g++ -arch x86_64 -I/Library/Frameworks/R.framework/Resources/include -I/Library/Frameworks/R.framework/Resources/include/x86_64 -DNDEBUG -I/Library/Frameworks/R.framework/Versions/2.16/Resources/library/Rcpp/include -I/usr/local/include -fPIC -g -O2 -c example.cpp -o example.o
g++ -arch x86_64 -dynamiclib -Wl,-headerpad_max_install_names -undefined dynamic_lookup -single_module -multiply_defined suppress -L/usr/local/lib -o example.so example.o /Library/Frameworks/R.framework/Versions/2.16/Resources/library/Rcpp/lib/x86_64/libRcpp.a -F/Library/Frameworks/R.framework/.. -framework R -Wl,-framework -Wl,CoreFoundation
> library(Rcpp)
> library(inline)
> dyn.load("example.so")
Error in dyn.load("example.so") :
unable to load shared object '/Users/rehbfle/Documents/CPPexercise/RCPP/example.so':
dlopen(/Users/rehbfle/Documents/CPPexercise/RCPP/example.so, 6): Symbol not found: __ZN7exampleD1Ev
Referenced from: /Users/rehbfle/Documents/CPPexercise/RCPP/example.so
Expected in: flat namespace
in /Users/rehbfle/Documents/CPPexercise/RCPP/example.so
---------case 2 - inline code-----------------------------------------
fx<-cxxfunction(signature(), plugin="Rcpp", include=inc)
Error in dyn.load(libLFile) :
unable to load shared object '/var/folders/qj/p9_mz7r9661gynb8w88sfbvhy6s5_l/T//RtmpaMinm3/file34b510aaf8e3.so':
dlopen(/var/folders/qj/p9_mz7r9661gynb8w88sfbvhy6s5_l/T//RtmpaMinm3/file34b510aaf8e3.so, 6): Symbol not found: __ZN7exampleC1Eii
Referenced from: /var/folders/qj/p9_mz7r9661gynb8w88sfbvhy6s5_l/T//RtmpaMinm3/file34b510aaf8e3.so
Expected in: flat namespace
in /var/folders/qj/p9_mz7r9661gynb8w88sfbvhy6s5_l/T//RtmpaMinm3/file34b510aaf8e3.so
Below the code details:
example.h
-------------------------
#ifndef EXAMPLE_H
#define EXAMPLE_H
class example
{
private:
float resultone;
int resultwo;
public:
example(int x, int y);
~example();
float multiply(int x, int y);
int doublex(int x);
};
#endif
example.cpp
---------------------------
#include "example.h"
#include <Rcpp.h>
using namespace Rcpp;
example::example(int x, int y){}
float example::multiply(int x, int y){
resultone = x * y;
return resultone;
}
int example::doublex(int x){
resultwo = x * 2;
return resultwo;
}
RCPP_MODULE(prova){
class_<example>("example")
.constructor<int,int>()
.method("square", &example::multiply)
.method("doppio", &example::doublex)
;
}
----------inline code----------------
inc <-'using namespace Rcpp;
class example
{
private:
float resultone;
int resultwo;
public:
example(int x, int y);
~example();
float multiply(int x, int y){
resultone = x * y;
return resultone;
}
int doublex(int x){
resultwo = x * 2;
return resultwo;
}
};
RCPP_MODULE(prova){
class_<example>("example")
.constructor<int,int>()
.method("square", &example::multiply)
.method("doppio", &example::doublex)
;
}'
-----------------
> sessionInfo()
R Under development (unstable) (2012-07-02 r59715)
Platform: x86_64-apple-darwin9.8.0/x86_64 (64-bit)
locale:
[1] en_GB.UTF-8/en_GB.UTF-8/en_GB.UTF-8/C/en_GB.UTF-8/en_GB.UTF-8
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] inline_0.3.8 Rcpp_0.9.13
More information about the Rcpp-devel
mailing list