On Wed, 2011-07-27 at 12:14 +0100, Sanatan Rai wrote: > Hi, > This is a newbie question. So apologies in advance if this is covered > somewhere in the docs (I haven't been able to find a satisfactory explanation). > > The issue is this: > > * I have a library called (lib)atmath as per: > > include_directories(${at_SOURCE_DIR}) > add_library(atfwmath RngStream.cpp RngStream.h coin.cpp coin.hpp) > target_link_libraries(atfwmath) > > Where coin.hpp: > > #ifndef COIN_HPP_INCLUDED > #define COIN_HPP_INCLUDED > //////////////////////////////////////////////////////////////////////////////// > #include <sstream> > #include <fw/math/RngStream.h> > using namespace std; > //////////////////////////////////////////////////////////////////////////////// > class coin > { > private: > static string name() > { > static unsigned long id(0); > stringstream str; > str << "Coin_" << (++id) << "_stream"; > return str.str(); > } > double p; > RngStream *rng; > void init(); > public: > coin(); > coin(double _p); > ~coin(); > bool toss(); > void reset(double _p); > }; > #endif > > and coin.cpp: > > #include <fw/math/coin.hpp> > //////////////////////////////////////////////////////////////////////////////// > coin::coin() : p(0.5), rng(0) { init();} > coin::coin(double _p) : p(_p), rng(0) > { > if ((p < 0) || (p > 1)) > throw; > init(); > } > coin::~coin() > { > delete rng, rng = 0; > } > void coin::init() > { > rng = new RngStream(name().c_str()); > } > bool coin::toss() > { > double u(rng->RandU01()); > return (u >= p); > } > void coin::reset(double _p) > { > if ((_p < 0) || (_p > 1)) throw; > p = _p; > } > > > I use these classes in another library: > > add_library(atidt STATIC idt.cpp) > target_link_libraries(atidt atmath boost_date_time boost_signals) > > > which is then linked to the final executable: > add_executable(bt bt.cpp) > target_link_libraries(bt atidt atmath boost_date_time boost_program_options) > target_link_libraries(bt "-Wl,-whole-archive -L../idt/ -latidt > -Wl,-no-whole-archive") > > When I run make: > > * libatmath compiles fine. > * libatidt complies fine. > * when compiling bt, it complains about coin::coin, coin::reset etc > being undefined. > Ie it would see it is not finding them in the linked libraries. > Even though: > > $ ar t libatmath.a > RngStream.cpp.o > coin.cpp.o > > What am I missing here? It is also quite bizarre as it doesn't > complain about the declarations in > RngStream.h which are defined in RngStream.c. > > Thanks in advance! > > --Sanatan > >
_______________________________________________ Powered by www.kitware.com Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Follow this link to subscribe/unsubscribe: http://www.cmake.org/mailman/listinfo/cmake