From edd at debian.org  Wed May  9 14:11:24 2012
From: edd at debian.org (Dirk Eddelbuettel)
Date: Wed, 9 May 2012 07:11:24 -0500
Subject: [Rd] R CMD check linking errors, when interfacing c++
In-Reply-To: <CANgFBQK1Qn8EjSd3XsV_8NQka6X23WV_g+97mX7qWRrwtam3MA@mail.gmail.com>
References: <CANgFBQK1Qn8EjSd3XsV_8NQka6X23WV_g+97mX7qWRrwtam3MA@mail.gmail.com>
Message-ID: <20394.24300.191419.4870@max.nulle.part>


On 9 May 2012 at 00:35, Zalan Szakolci wrote:
| Hi there,
| 
| I am trying to interface c++ code in R and make a package. With R CMD SHLIB
| the dll was created, but when I try R CMD check, I am getting 'undefined
| reference to..' linkage error messages.
| 
| The relevant c++ source from conf-infomap.cpp:

[...]
 
| Now when I run R CMD check, in file 00install.out I am getting the
| following linking errors:
| 
| * installing *source* package ?DyA? ...
| ** libs
| ** arch -
| g++ -I/usr/share/R/include -DNDEBUG      -fpic  -I -Wall -O3 -funroll-loops
| -pipe -c conf-infomap.cpp -o conf-infomap.o
| g++ -I/usr/share/R/include -DNDEBUG      -fpic  -I -Wall -O3 -funroll-loops
| -pipe -c GreedyBase.cpp -o GreedyBase.o
| g++ -I/usr/share/R/include -DNDEBUG      -fpic  -I -Wall -O3 -funroll-loops
| -pipe -c Greedy.cpp -o Greedy.o
| g++ -I/usr/share/R/include -DNDEBUG      -fpic  -I -Wall -O3 -funroll-loops
| -pipe -c Node.cc -o Node.o
| g++ conf-infomap.o GreedyBase.o Greedy.o Node.o mersenne.cpp stoc1.cpp
| userintf.cpp -lm -o conf-infomap

What is your src/Makevars file?  

This looks very wrong as you are obviously not linking against R itself.

I would recommend a good long look at both the 'Writing R Extensions' manual
as well as some of the existing CRAN packages uses C++ sources.

You can (and should) also try

    R CMD COMPILE ...

    R CMD SHLIB ...

    R CMD INSTALL ...

etc as 'R CMD check' is really only the final bit.

Dirk

-- 
R/Finance 2012 Conference on May 11 and 12, 2012 at UIC in Chicago, IL
See agenda, registration details and more at http://www.RinFinance.com



[Rd] R CMD check linking errors, when interfacing c++
Dirk Eddelbuettel