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

Lescai, Francesco f.lescai at ucl.ac.uk
Thu Jul 19 12:25:48 CEST 2012


Thanks, it definitely pointed me in the right direction.
I added the additional flag needed by the compiler
using
PKG_CPPFLAGS=`Rscript -e 'Rcpp:::CxxFlags()'` PKG_LIBS=`Rscript -e 'Rcpp:::LdFlags()'` PKG_LIBS="$PKG_LIBS -lre2" R CMD SHLIB

and now in dyn.load I have a symbol error demangled as
typeinfo for Rcpp::not_compatible

I've tested a C++ implementation (partial, the project is not quite complete), and it seems to work.
I had some problems in installing boost regular expression libraries on Mac OSx, so I'm using re2 which doesn't special requirements.
It works in C++, but if that's the problem with linking to R then I have to think to alternative solutions.

thanks Douglas and Dirk for your help,
Francesco


On 19 Jul 2012, at 02:01, Dirk Eddelbuettel wrote:


On 18 July 2012 at 11:47, Douglas Bates wrote:
| One way forward is to use a program like c++filt to demangle the name
| that is not found.  It is
|
| re2::RE2::Arg::parse_float(char const*, int, void*)

I would also recommend to simplify as much as possible. In such a situation,
I'd try to build a working C++ implementation (without any Rcpp or R) first
to make the design is right.

Dirk

|
| On Wed, Jul 18, 2012 at 11:18 AM, Lescai, Francesco <f.lescai at ucl.ac.uk<mailto:f.lescai at ucl.ac.uk>> wrote:
| > 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]
| > --------------------------------------------------------------------------------
| >
| >
| > _______________________________________________
| > 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

--
Dirk Eddelbuettel | edd at debian.org<mailto:edd at debian.org> | http://dirk.eddelbuettel.com


---------------------------------------------------------------------------------
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/20120719/e63f31e2/attachment-0001.html>


More information about the Rcpp-devel mailing list