Boost logo

Boost :

From: Kresimir Fresl (fresl_at_[hidden])
Date: 2002-03-27 05:44:57


Peter Schmitteckert (boost) wrote:

> It seems that
> double numerics::detail::conj(double const& x)
> is missing somewhere.
[...]> $ g++-3.0 -I ../.. -DUSE_GCC u.C -o u
> /tmp/cc95hlYg.o: In function
> `numerics::scalar_conj<double>::operator()(double const&) const':
> /tmp/cc95hlYg.o(.gnu.linkonce.t._ZNK8numerics11scalar_conjIdEclERKd+0xd):
> undefined reference to `numerics::detail::conj(double const&)'
> collect2: ld returned 1 exit status

Some time ago I stumbled upon the same problem (although
it wasn't `conj()', but some other function declared/defined
in `ublas/math.h').

Relevant lines from `ublas/config.h':

    #ifdef USE_GCC
    // ...
    #ifdef NDEBUG
    // ...
    #else
    // ...
    #define NUMERICS_USE_INSTANT
    // ...
    #endif
    #endif

That is, if you do not define NDEBUG, then
NUMERICS_USE_INSTANT is defined. And this
means that some (all?) functions from `ublas/math.h'
(eg. `conj()') will not be inlined. Instead, you
should compile and link `ublas/instant.cpp':

   g++-3.0 -I ../.. -DUSE_GCC u.C your_ublas_path/instant.cpp -o u

The alternative is to define NDEBUG:

   g++-3.0 -I ../.. -DNDEBUG -DUSE_GCC u.C

BTW, without NDEBUG you will not get true expression
templates because

    #define NUMERICS_USE_ET

is in #ifdef NDEBUG block.

Sincerely,

fres


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk