On 2 October 2013 at 15:45, Martyn Plummer wrote:
| In C++, everything goes in the global namespace unless the programmer
| explicitly creates one. So when you dynamically load two dynamic shared
| libraries with a "Shape" object they clash.
| 
| The solution here is to put 
| 
| namespace rgl {
| ...
| }
| 
| around your class definitions in the rglm package, and 
| 
| using rgl::Shape

Exactly.
 
| at the top of any source file that refers to rgl Shape. Likewise, the
| igraph package should declare shape in the "igraph" namespace.

And as I wrote to Duncan off-list, igraph doesn't, even though it otherwise
uses an igraph namespace:

   /** Shape.h
    */
   
   #ifndef SHAPE_H
   #define SHAPE_H
   
   #include <string>
   #include "Color.h"
   #include "Ray.h"
   #include "Point.h"
   
   class Shape
   [....]   

So the clash is due to two packages simulatenously failing to make use of
namespaces.  

And at that point the linker appears to pick in search (link ?) order.

Dirk

-- 
Dirk Eddelbuettel | e...@debian.org | http://dirk.eddelbuettel.com

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to