Boost logo

Ublas :

Subject: [ublas] compile error on gesv.hpp on 64Bit system
From: Kraus Philipp (philipp.kraus_at_[hidden])
Date: 2010-07-24 14:45:19


Hi everyone,

I hope that' I'm not off topic with my question, because it can be
also a configuration error of my system.

I use the lapack numerical bindings with boost. On my OSX I have
compiled the lapck with atlas (configure command: configure --nof77 --
prefix=<target> --with-netlib-lapack-tarfile=lapack.tgz). On the OSX
everything works fine.
Now I try to build the same code (with the same libs, boost 1.43,
ATLAS 3.9.25) on my Gentoo Linux 64 Bit and I got errors in the
gesv.hpp:

boost/numeric/bindings/lapack/driver/gesv.hpp: In static member
function 'static ptrdiff_t
boost::numeric::bindings::lapack::gesv_impl<Value>::invoke(MatrixA&,
VectorIPIV&, MatrixB&) [with MatrixA =
boost::numeric::ublas::matrix<double,
boost::numeric::ublas::basic_column_major<long unsigned int, long
int>, boost::numeric::ublas::unbounded_array<double,
std::allocator<double> > >, VectorIPIV =
boost::numeric::ublas::vector<long int,
boost::numeric::ublas::unbounded_array<long int, std::allocator<long
int> > >, MatrixB = boost::numeric::ublas::matrix<double,
boost::numeric::ublas::basic_column_major<long unsigned int, long
int>, boost::numeric::ublas::unbounded_array<double,
std::allocator<double> > >, Value = double]':

boost/numeric/bindings/lapack/driver/gesv.hpp:236: instantiated from
'ptrdiff_t boost::numeric::bindings::lapack::gesv(MatrixA&,
VectorIPIV&, MatrixB&) [with MatrixA =
boost::numeric::ublas::matrix<double,
boost::numeric::ublas::basic_column_major<long unsigned int, long
int>, boost::numeric::ublas::unbounded_array<double,
std::allocator<double> > >, VectorIPIV =
boost::numeric::ublas::vector<long int,
boost::numeric::ublas::unbounded_array<long int, std::allocator<long
int> > >, MatrixB = boost::numeric::ublas::matrix<double,
boost::numeric::ublas::basic_column_major<long unsigned int, long
int>, boost::numeric::ublas::unbounded_array<double,
std::allocator<double> > >]'

boost/numeric/bindings/lapack/driver/gesv.hpp:213: error: no matching
function for call to
'gesv
(boost::numeric::bindings::lapack::gesv_impl<Value>::invoke(MatrixA&,
VectorIPIV&, MatrixB&) [with MatrixA =
boost::numeric::ublas::matrix<double,
boost::numeric::ublas::basic_column_major<long unsigned int, long
int>, boost::numeric::ublas::unbounded_array<double,
std::allocator<double> > >, VectorIPIV =
boost::numeric::ublas::vector<long int,
boost::numeric::ublas::unbounded_array<long int, std::allocator<long
int> > >, MatrixB = boost::numeric::ublas::matrix<double,
boost::numeric::ublas::basic_column_major<long unsigned int, long
int>, boost::numeric::ublas::unbounded_array<double,
std::allocator<double> > >, Value = double]::order, ptrdiff_t,
ptrdiff_t, double*, ptrdiff_t, long int*, double*, ptrdiff_t)'

Only a difference is the ATLAS build libs:
On the 64Bit system the fortran libs are build, so I have got more
libs: libatlas.a libcblas.a libf77blas.a liblapack.a libptcblas.a
libptf77blas.a
On my OSX are only these libs: libatlas.a libcblas.a liblapack.a
libptcblas.a

I use g++ for compiling the source, on OSX g++ 4.0.1 and on the Gentoo
4.4.4-r1.
I have checked the include path and compile the source as root user,
so I should have full access to every files.
Includes are set with CPATH and CPPPATH (libs with LD_LIBRARY_PATH /
LIBRARY_PATH / LDPATH)

I'm at this time helpless, because on my both OSX (Leo and Snow
Leopard) everythings works, but the same configuration on my Gentoo
don't run.
If I disable any code (set it to a comment), I would compile the code
without any problems (The g++ option -L and -l are set and it seems
that all libs and includes are found)
The libs are installed under /opt/library (e.g.: Boost under /opt/
library/Boost/1.43/ but the env variables are set to this dirs)

Do I have forgot anything? I hope anyone can help me and send me a tip
or an idea.
Thanks a lot

Phil