Dear People, Over the last few days I've been writing C++ to compile as a shared library (previously I have always used C). Not entirely to my surprise, I am getting errors. Specifically, when I try to load the shared library, I get Error in dyn.load(x, as.logical(local), as.logical(now)) : unable to load shared library "/home/faheem/research/thesis/sim/ms/ms.so": /home/faheem/research/thesis/sim/ms/ms.so: undefined symbol: __gxx_personality_v0 The structure of the C++ file is as follows. I'm concatenating the header file (.hh) and the actual source code file (.cc) here. (I'm not including any real code here, since I hope this is just a syntax issue). I have //some initial header stuff #include<vector> #define INITTIME 100 #define LOWERLIM -1000000.0 #define UPPERLIM 1000000.0 using std::vector; using std::equal; // define some structs struct alpha {...}; ... //declare functions foo(...); bar(...); //function definitions foo() { bar(); ... } bar {...} //end c++ file In a separate R file I am trying trying to call foo. result <- .C("foo",...) ... I have read the instructions in the "R Extensions manual" and it appears I need to declare (at least) the function that I am calling from R with external linkage. So I added extern "C" next to the declaration of the function foo. This didn't work. Then I wrapped all the declarations in a block. extern "C"{.....} I tried other variations, including putting all the definitions in an extern "C" block. I still get the same error. Since I don't really understand what the extern "C" is supposed be doing here, I'm being pretty brainless about this. Note of course I'm compiling with a C++ compiler (g++) MAKEFLAGS='CXX=\ g++-3.1 PKG_CXXFLAGS=\ -Wall\ -pedantic\ -Werror\ -Wshadow ' R CMD SHLIB ms.cc -o ms.so Would someone be kind enough to tell me what the correct syntax is? It might also be helpful if someone could point to R code that uses compiled C++ code. Addendum: I looked at the file svm.h in the e1071 package source, and tried to imitate that, but I still get the same error. Sincerely, Faheem Mitha. -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html Send "info", "help", or "[un]subscribe" (in the "body", not the subject !) To: r-help-request at stat.math.ethz.ch _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._
Faheem Mitha
2002-Jul-24 22:09 UTC
[R] update (Re: loading compiled C++ code as shared library)
On Wed, 24 Jul 2002, Faheem Mitha wrote:> > Dear People, > > Over the last few days I've been writing C++ to compile as a shared > library (previously I have always used C). Not entirely to my surprise, I > am getting errors. Specifically, when I try to load the shared library, I > get > > Error in dyn.load(x, as.logical(local), as.logical(now)) : > unable to load shared library > "/home/faheem/research/thesis/sim/ms/ms.so": > /home/faheem/research/thesis/sim/ms/ms.so: undefined symbol: > __gxx_personality_v0This appears to have something to do with my compile options (see below). Just doing "R CMD SHLIB ms.cc -o ms.so" does not give the error. Anyone have any idea what might be causing this?> Note of course I'm compiling with a C++ compiler (g++) > > MAKEFLAGS='CXX=\ g++-3.1 PKG_CXXFLAGS=\ -Wall\ -pedantic\ -Werror\ > -Wshadow ' R CMD SHLIB ms.cc -o ms.soSincerely, Faheem Mitha. -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html Send "info", "help", or "[un]subscribe" (in the "body", not the subject !) To: r-help-request at stat.math.ethz.ch _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._