[eigen] shared libraries and including Eigen in base class

[ Thread Index | Date Index | More lists.tuxfamily.org/eigen Archives ]


I have a quick question

With the following classes

// base.h
#ifndef  BASE_INC
#define  BASE_INC
#include <Eigen/Eigen>
class Base {
    public:
        Base ();                   
        ~Base ();                   
}; // -----  end of class  Base  -----
#endif   // ----- #ifndef BASE_INC  -----

// base.cpp
#include "base.h"
Base::Base() {}
Base::~Base() {}

// derived.h
#ifndef  DERIVED_INC
#define  DERIVED_INC
#include "base.h"
class Derived : public Base {
    public:
        Derived ();                   
        ~Derived ();                   
}; // -----  end of class  Derived  -----
#endif   // ----- #ifndef DERIVED_INC  -----

//derived.cpp
#include "derived.h"
Derived::Derived() {}
Derived::~Derived() {}

If I compile these into a static library, all is fine. But using gcc and compiling into a shared library, the objects are made fine, but the call to the linker fails.

g++ -o base.os -c -fPIC -I/home/tirons/src/eigen base.cpp
g++ -o derived.os -c -fPIC -I/home/tirons/src/eigen derived.cpp

g++ -o libexample.so -shared base.os derived.os

derived.os: In function `Eigen::l1CacheSize()':
derived.cpp:(.text+0x25cf): multiple definition of `Eigen::l1CacheSize()'
base.os:base.cpp:(.text+0x25cf): first defined here
derived.os: In function `Eigen::setL1CacheSize(long)':
derived.cpp:(.text+0x25f8): multiple definition of `Eigen::setL1CacheSize(long)'
base.os:base.cpp:(.text+0x25f8): first defined here

Is there some way around this? This type of code has been fine before some recent changes. I know these changes should help performance though. Maybe there are compelling reasons why you shouldn't be including Eigen in any base classes?

Thanks again,

Trevor


Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/