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
[email protected]<mailto:[email protected]>
https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel
_______________________________________________
Rcpp-devel mailing list
[email protected]<mailto:[email protected]>
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: [email protected]<mailto:[email protected]>
phone: +44.(0)207.905.2274
[ext: 2274]
--------------------------------------------------------------------------------
_______________________________________________
Rcpp-devel mailing list
[email protected]
https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel