[Rcpp-devel] dyn.load error - symbol not found - expected in: flat namespace

Lescai, Francesco f.lescai at ucl.ac.uk
Wed Jul 18 18:18:24 CEST 2012


I'm still having this problem.
I progressively increased the complexity of my code, because my ultimate goal is to integrate a series of C++ classes to perform some functions external to R.

My test examples worked well, and I just noticed in order to generate the shared object I have to compile together all the classes connected to each others, like this.
PKG_CPPFLAGS=`Rscript -e 'Rcpp:::CxxFlags()'` PKG_LIBS=`Rscript -e 'Rcpp:::LdFlags()'` R CMD SHLIB ClassFive.cpp ClassOne.cpp ClassTwo.cpp ClassThree.cpp ClassFour.cpp

When I finally compiled my real code, I didn't get any compilation error, but I still got from within R the error message:
Error in dyn.load("ClassFive.so") :
  unable to load shared object [...]
Symbol not found: __ZN3re23RE23Arg11parse_floatEPKciPv

I checked for the issues that generated the same problem before, i.e. constructor and deconstructors, and they are all ok.
I couldn't find any explicit call to "parse_float" which seems to be reported in the error message.
To start, I linked only one class to R and one method only of the very same class.

I understand it might be quite difficult to identify the specific problem without going through lots of code (I have now 5 different classes, each with several methods).
Is there a number of possible mistakes leading to such kind of messages, that could help me narrow down the cause?

Thanks very much for any help,
Francesco


------------
> sessionInfo()
R version 2.15.1 (2012-06-22)
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

loaded via a namespace (and not attached):
[1] tcltk_2.15.1 tools_2.15.1




On 6 Jul 2012, at 15:50, Lescai, Francesco wrote:

Argh.. Apologies guys.. Found the error myself.
Constructor and deconstructor must be specified with {} even if no code is foreseen for them.

A novice error, hope at least highlighting it could be useful to other newbies like me :-)

cheers,
Francesco


On 6 Jul 2012, at 15:37, Lescai, Francesco wrote:

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






_______________________________________________
Rcpp-devel mailing list
Rcpp-devel at lists.r-forge.r-project.org<mailto:Rcpp-devel at lists.r-forge.r-project.org>
https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel




_______________________________________________
Rcpp-devel mailing list
Rcpp-devel at lists.r-forge.r-project.org<mailto:Rcpp-devel at lists.r-forge.r-project.org>
https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel


---------------------------------------------------------------------------------
Francesco Lescai, PhD, EDBT
Senior Research Associate in Genome Analysis
University College London
Faculty of Population Health Sciences
Dept. Genes, Development & Disease
ICH - Molecular Medicine Unit, GOSgene team
30 Guilford Street
WC1N 1EH London UK

email: f.lescai at ucl.ac.uk<mailto:f.lescai at ucl.ac.uk>
phone: +44.(0)207.905.2274
[ext: 2274]
--------------------------------------------------------------------------------

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.r-forge.r-project.org/pipermail/rcpp-devel/attachments/20120718/e08fb587/attachment-0001.html>


More information about the Rcpp-devel mailing list