Skip to content
Back to formatted view

Raw Message

Message-ID: <20692.21218.85640.502972@max.nulle.part>
Date: 2012-12-21T12:15:30Z
From: Dirk Eddelbuettel
Subject: [Rcpp-devel] Rcpp and C++ mangling
In-Reply-To: <20121221111254.AAE5BE6726@smtp.hushmail.com>

On 21 December 2012 at 12:12, jean.p at hushmail.com wrote:
| hi,
| 
| a quick question regarding a Rcpp function I wrote using an external library
| (gretl) : 
| 
| with the help of a makefile (adapted from the convolution Rcpp example), the
| code compiles just fine and turns into a shared object in linux (.so file)
| 
| however, when I then try to load the newly created shared library into R using
| dyn.load, I get the following error message:
| 
| 
| dyn.load("/home/jean/Documents/code experiments/gretl/test2.so")
| Error in dyn.load("/home/jean/Documents/code experiments/gretl/test2.so") :
|   unable to load shared object '/home/jean/Documents/code experiments/gretl/test2.so':
|   /home/jean/Documents/code experiments/gretl/test2.so: undefined symbol: _Z13kalman_smoothP7kalman_PP13gretl_matrix_S3_Pi
| 
| 
| The undefined symbol is in fact (after c++ unmangling) kalman_smooth(kalman_*,
| gretl_matrix_**, gretl_matrix_**, int*), a function from the gretl library
| 
| Do you think the problem comes from the c++ mangling of gretl's  C library or
| is it rather linked to internals of gretl ?

I suspect you are doing something wrong, that is a standard linker error. It
could be as easy as forgetting the extern "C" or something.

The name wrangling happens because it is after all C++ and not C..  Look at
the Rcpp + GSL examples for inspiration, or at other CRAN packages working
with third-party C libraries.  This works well.

| many thanks for your help!

We cannot help much more as you example is not reproducible.

Dirk

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