[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