[Ipopt] Compiling IPOPT on Ubuntu 11.10 64-bit with ATLAS

Andrey Romanenko andrey at ciengis.com
Tue Feb 21 14:05:30 EST 2012


Hi!

Please check your alternatives as there are two: one for libblas.so and 
another one for libblas.so.3gf. The same applies to liblapack.so and 
liblapack.so.3gf

Best Regards,
Andrey Romanenko

On Tuesday 21 February 2012 13:54:02 David Veerasingam wrote:
> Hi Andreas,
> 
> Thanks for your reply!  got me past the configure stage, but my make still
> fails.
> 
> 1) I modified my configure statement to read as follows: (the options
> -lblas and -llapack seemed to pick up the BLAS and Lapack in ThirdParty/,
> not the ATLAS libraries)
> 
> ./configure --with-blas="/usr/lib/atlas-base/atlas/libblas.so.3gf" \
>  --with-lapack="/usr/lib/atlas-base/atlas/liblapack.so.3gf"
> 
> The configure worked fine:
> ========================================================================
> <snipped>
> checking whether user supplied
> BLASLIB="/usr/lib/atlas-base/atlas/libblas.so.3gf.0" works... yes:
> /usr/lib/atlas-base/atlas/libblas.so.3gf.0
> checking whether user supplied
> LAPACKLIB="/usr/lib/atlas-base/atlas/liblapack.so.3gf.0" works... yes:
> /usr/lib/atlas-base/atlas/liblapack.so.3gf.0
> /usr/lib/atlas-base/atlas/libblas.so.3gf.0
> <snipped>
> ========================================================================
> 
> 
> 2) However, the "make" process still fails.
> ========================================================================
> <snipped>
> ../../Interfaces/.libs/libipopt.a(IpLapack.o): In function
> `Ipopt::IpLapackDpotrs(int, int, double const*, int, double*, int)':
> IpLapack.cpp:(.text+0x50): undefined reference to `dpotrs_'
> ../../Interfaces/.libs/libipopt.a(IpLapack.o): In function
> `Ipopt::IpLapackDpotrf(int, double*, int, int&)':
> IpLapack.cpp:(.text+0x90): undefined reference to `dpotrf_'
> ../../Interfaces/.libs/libipopt.a(IpLapack.o): In function
> `Ipopt::IpLapackDsyev(bool, int, double*, int, double*, int&)':
> IpLapack.cpp:(.text+0x124): undefined reference to `dsyev_'
> IpLapack.cpp:(.text+0x27c): undefined reference to `dsyev_'
> ../../Interfaces/.libs/libipopt.a(IpLapack.o): In function
> `Ipopt::IpLapackDgetrf(int, double*, int*, int, int&)':
> IpLapack.cpp:(.text+0x2dc): undefined reference to `dgetrf_'
> ../../Interfaces/.libs/libipopt.a(IpLapack.o): In function
> `Ipopt::IpLapackDgetrs(int, int, double const*, int, int*, double*, int)':
> IpLapack.cpp:(.text+0x348): undefined reference to `dgetrs_'
> ../../Interfaces/.libs/libipopt.a(IpBlas.o): In function
> `Ipopt::IpBlasDdot(int, double const*, int, double const*, int)':
> IpBlas.cpp:(.text+0x21): undefined reference to `ddot_'
> ../../Interfaces/.libs/libipopt.a(IpBlas.o): In function
> `Ipopt::IpBlasDnrm2(int, double const*, int)':
> IpBlas.cpp:(.text+0x47): undefined reference to `dnrm2_'
> ../../Interfaces/.libs/libipopt.a(IpBlas.o): In function
> `Ipopt::IpBlasDasum(int, double const*, int)':
> IpBlas.cpp:(.text+0x67): undefined reference to `dasum_'
> ../../Interfaces/.libs/libipopt.a(IpBlas.o): In function
> `Ipopt::IpBlasIdamax(int, double const*, int)':
> IpBlas.cpp:(.text+0x87): undefined reference to `idamax_'
> ../../Interfaces/.libs/libipopt.a(IpBlas.o): In function
> `Ipopt::IpBlasDcopy(int, double const*, int, double*, int)':
> IpBlas.cpp:(.text+0xb1): undefined reference to `dcopy_'
> ../../Interfaces/.libs/libipopt.a(IpBlas.o): In function
> `Ipopt::IpBlasDaxpy(int, double, double const*, int, double*, int)':
> IpBlas.cpp:(.text+0xf2): undefined reference to `daxpy_'
> ../../Interfaces/.libs/libipopt.a(IpBlas.o): In function
> `Ipopt::IpBlasDscal(int, double, double*, int)':
> IpBlas.cpp:(.text+0x125): undefined reference to `dscal_'
> ../../Interfaces/.libs/libipopt.a(IpBlas.o): In function
> `Ipopt::IpBlasDgemv(bool, int, int, double, double const*, int, double
> const*, int, double, double*, int)':
> IpBlas.cpp:(.text+0x1d6): undefined reference to `dgemv_'
> ../../Interfaces/.libs/libipopt.a(IpBlas.o): In function
> `Ipopt::IpBlasDsymv(int, double, double const*, int, double const*, int,
> double, double*, int)':
> IpBlas.cpp:(.text+0x25f): undefined reference to `dsymv_'
> ../../Interfaces/.libs/libipopt.a(IpBlas.o): In function
> `Ipopt::IpBlasDgemm(bool, bool, int, int, int, double, double const*, int,
> double const*, int, double, double*, int)':
> IpBlas.cpp:(.text+0x36a): undefined reference to `dgemm_'
> ../../Interfaces/.libs/libipopt.a(IpBlas.o): In function
> `Ipopt::IpBlasDsyrk(bool, int, int, double, double const*, int, double,
> double*, int)':
> IpBlas.cpp:(.text+0x41b): undefined reference to `dsyrk_'
> ../../Interfaces/.libs/libipopt.a(IpBlas.o): In function
> `Ipopt::IpBlasDtrsm(bool, int, int, double, double const*, int, double*,
> int)':
> IpBlas.cpp:(.text+0x4fe): undefined reference to `dtrsm_'
> ../../Interfaces/.libs/libipopt.a(IpMa28Partition.o): In function
> `ma28part_':
> IpMa28Partition.F:(.text+0x156): undefined reference to `dcopy_'
> /home/usual/INSTALLDIRS/Ipopt310/ThirdParty/HSL/.libs/libcoinhsl.a(ma57ad.o)
> : In function `mc71ad_':
> ma57ad.f:(.text+0xb0a8): undefined reference to `idamax_'
> ma57ad.f:(.text+0xb2e3): undefined reference to `idamax_'
> /home/usual/INSTALLDIRS/Ipopt310/ThirdParty/HSL/.libs/libcoinhsl.a(ma57ad.o)
> : In function `ma57td_':
> ma57ad.f:(.text+0xc9e2): undefined reference to `dgemm_'
> ma57ad.f:(.text+0xca97): undefined reference to `dtpsv_'
> /home/usual/INSTALLDIRS/Ipopt310/ThirdParty/HSL/.libs/libcoinhsl.a(ma57ad.o)
> : In function `ma57rd_':
> ma57ad.f:(.text+0xd6d6): undefined reference to `dgemm_'
> ma57ad.f:(.text+0xd765): undefined reference to `dtpsv_'
> /home/usual/INSTALLDIRS/Ipopt310/ThirdParty/HSL/.libs/libcoinhsl.a(ma57ad.o)
> : In function `ma57yd_':
> ma57ad.f:(.text+0xe06e): undefined reference to `dgemv_'
> ma57ad.f:(.text+0xe0b8): undefined reference to `dtpsv_'
> /home/usual/INSTALLDIRS/Ipopt310/ThirdParty/HSL/.libs/libcoinhsl.a(ma57ad.o)
> : In function `ma57qd_':
> ma57ad.f:(.text+0xe7ae): undefined reference to `dtpsv_'
> ma57ad.f:(.text+0xec86): undefined reference to `dgemm_'
> /home/usual/INSTALLDIRS/Ipopt310/ThirdParty/HSL/.libs/libcoinhsl.a(ma57ad.o)
> : In function `ma57xd_':
> ma57ad.f:(.text+0xedfa): undefined reference to `dtpsv_'
> ma57ad.f:(.text+0xf1f9): undefined reference to `dgemv_'
> /home/usual/INSTALLDIRS/Ipopt310/ThirdParty/HSL/.libs/libcoinhsl.a(ma57ad.o)
> : In function `ma57od_':
> ma57ad.f:(.text+0x1517c): undefined reference to `dgemm_'
> ma57ad.f:(.text+0x163a2): undefined reference to `dgemm_'
> ma57ad.f:(.text+0x16478): undefined reference to `dgemm_'
> collect2: ld returned 1 exit status
> make[3]: *** [ipopt] Error 1
> make[3]: Leaving directory
> `/home/usual/INSTALLDIRS/Ipopt310/Ipopt/src/Apps/AmplSolver'
> make[2]: *** [all-recursive] Error 1
> make[2]: Leaving directory `/home/usual/INSTALLDIRS/Ipopt310/Ipopt/src/Apps'
> make[1]: *** [all-recursive] Error 1
> make[1]: Leaving directory `/home/usual/INSTALLDIRS/Ipopt310/Ipopt'
> ========================================================================
> 
> If one were to do an 'nm' on the static library, one notices for instance
> that the dgemm symbol clearly exists.
> ========================================================================
> % nm /usr/lib/atlas-base/atlas/libblas.a | grep dgemm
> 0000000000000000 T atl_f77wrap_dgemm_
> ATL_dgemm.o:
> 0000000000000000 T ATL_dgemm
> dgemm.o:
>                  U atl_f77wrap_dgemm_
> ========================================================================
> 
> I'm baffled!
> 
> David
> 
> 
> On Wed, Feb 15, 2012 at 10:12 PM, Andreas Waechter <awaechter.iems at gmail.com
> > wrote:
> > 
> > Hi David,
> > 
> >  I was wondering if anyone here running Ubuntu has managed to
> >  successfully>  
> >> compile IPOPT 3.10 with the system-packaged ATLAS?
> >> 
> >> I'm running Ubuntu 11.10 64-bit.
> > 
> > I'm running the same OS.
> > 
> >> In previous versions of Ubuntu, all I had to do was to link against
> >> libblas.so.3 and liblapack.so.3 provided by the package
> >> libatlas-dev-sse2. However, this package has been removed and
> >> replaced with a new package called libatlas-base-dev (ATLAS 3.8.4),
> >> which provides two new libraries named libf77blas.so and
> >> liblapack_atlas.so.
> >> 
> >> IPOPT's configure script accepts libf77blas.so but fails for
> >> liblapack_atlas.so.
> >> 
> >> 1) Could it be that the new liblapack_atlas.so does not have the
> >> LAPACK
> >> routines that IPOPT needs?
> >> 2) Are there any workarounds or do I have to compile my own ATLAS from
> >> scratch?
> > 
> > I have the same package installed (libatlas-base-dev).  If I understand
> > correctly, all you have to do is to link with -lblas and -llapack.  Your
> > "alternatives configurator" should be set up automatically to pick up
> > 
> > /usr/lib/atlas-base/atlas/**libblas.so.3gf and
> > /usr/lib/atlas-base/atlas/**liblapack.so.3gf
> > 
> > If you look at the symbols in the static versions of those libraries
> > (e.g., nm /usr/lib/atlas-base/atlas/**libblas.a) you will see the atlas
> > symbols ATL_...  I guess this setup is meant to be a very convenient way
> > to link with Atlas by just using -lblas and -llapack.
> > 
> > Hope this is correct, and hopeful,
> > 
> > Andreas


More information about the Ipopt mailing list