R-loadable dll with minGW-compiled linked library

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

R-loadable dll with minGW-compiled linked library

Ilana Lichtenstein
I am trying to create a dynamic library (dll) for loading into R with
dyn.load command.

I am trying to use the library libdai (a machine learning C++ library) and
boost (C++ libraries) in my main C++ program. While I am able to compile the
main C++ file I am using successfully into a dll, there is a problem linking
to libraries (libdai.a) and boost libraries. I only have instructions on how
to compile these libraries with cygwin - NOT with minGW tools, as required
by Rtools and R for correct dll creation and loading.

Currently I have R CMD SHLIB configured as follows:

(To create object file)
<path to Rtools/minGW/bin>/g++  -c -Wno-deprecated -Wall -W -Wextra -DCYGWIN
-O3 -I<path toibdai/include>  -I<path to boost_1_46_1> -o  example.o

(To create shared library)
example examples/example.cpp
<path to Rtools/minGW/bin>/g++ -shared -s static-libgcc -o example.dll
example.o -L.../libdai/lib -ldai -L"C:/cygwin/lib" -lcygwin

Including the -lcygwin library is necessary for compilation without linker
error. However, it causes dyn.load to "hang" when used in R.


The tutorials on the web regarding creation of C++ dlls do not discuss
linking to libraries.



Thus my two questions are:
(1) Does anyone know how to compile a C++ program which links to a library,
which dyn.load will accept? What flags are required in the R makeconf? How
do you link in a library to the dll?  What flags must I compile the libdai
and boost libraries with?
(2) If my interfacing issue cannot be resolved, does anyone know any tools
that interface to R that do machine learning belief propagation?

Any help is appreciated.

Ilana Lichtenstein
PhD Candidate
School of IT
University of Sydney

        [[alternative HTML version deleted]]

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
Reply | Threaded
Open this post in threaded view
|

Re: R-loadable dll with minGW-compiled linked library

Dirk Eddelbuettel

On 30 August 2011 at 02:25, Ilana Lichtenstein wrote:
| The tutorials on the web regarding creation of C++ dlls do not discuss
| linking to libraries.

Well, there are working examples among the 3200+ CRAN packages...

| Thus my two questions are:
| (1) Does anyone know how to compile a C++ program which links to a library,
| which dyn.load will accept? What flags are required in the R makeconf? How
| do you link in a library to the dll?  What flags must I compile the libdai
| and boost libraries with?

Sure. I am as self-centered as the next guy so I welcome you to look at my
RQuantLib project (on CRAN and R-Forge) which has been doing that for a
decade -- and the QuantLib project / library itself uses parts of Boost.

Moreover, Rcpp is a package whose goal it is to make C++ interchange from /
to R a little less painful.  There are now three dozen packages on CRAN using
it (see the 'reverse depends' via the Rcpp CRAN page) and several of these
link to other external libraries.

[ All that said, I suspect you need to build everything with MinGW. You
certainly cannot mix object code generated via compilers from the visual
whichever suites (as C++ function headers get mangled) and I am pretty
certain that Cygwin's g++ may be doomed for the same reason. I'd be happy to
be convinced otherwise; this would be something worth documenting better. ]

| (2) If my interfacing issue cannot be resolved, does anyone know any tools
| that interface to R that do machine learning belief propagation?

Did you look at the machine learning Task View ?

Dirk


--
Two new Rcpp master classes for R and C++ integration scheduled for
New York (Sep 24) and San Francisco (Oct 8), more details are at
http://dirk.eddelbuettel.com/blog/2011/08/04#rcpp_classes_2011-09_and_2011-10
http://www.revolutionanalytics.com/products/training/public/rcpp-master-class.php

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel