[Coin-ipopt] IPOPT+CUTEr can't work

Andreas Waechter andreasw at watson.ibm.com
Wed Nov 9 13:59:30 EST 2005


Hi Dominique,

Thanks for your feedback!

> Now that I look into it, it would appear that the libraries in IPOPT
> have changed name and location in the last few releases on the Fortran
> distribution. I hadn't noticed as I have mostly been using the AMPL
> interface lately.
>
> To summarize, there are two files to alter,
> * the ipopt.liblist created by one of the IPOPT Makefiles and placed in
> $MYCUTER/double/lib
> * the CUTEr script $MYCUTER/bin/ipopt
>
> I have been playing with ipopt.liblist and it seems that libipcore.a
> needs libiptron.a but libiptron.a also needs libipcore.a so that
> regardless of the order in which the libs appear there are missing
> symbols. The (brutal) workaround is to repeat libipcore twice in the
> list. The file ipopt.liblist should look like this:
>
> -L$IPOPT/IPOPT/ipopt -lipcore -L$IPOPT/OTHERS/TRON -liptron
> -L$IPOPT/IPOPT/ipopt -lipcore -L$IPOPT/OTHERS/HSL -liphsl -llapack
> -L$IPOPT/OTHERS/blas -lipblas
>
> in that order, where $IPOPT is the directory where IPOPT is installed.

Actually, those libraries libipcore.a, libiptron.a, libiphsl.a are
"internal" libraries created during the Ipopt compilation process and
should not be access by any user of Ipopt after a proper installation of
Ipopt.

Instead, when you type 'make install', the Makefile will create a new
library, simply called libipopt.a, which should include the content of all
those "internal" libraries (libipcore.a, libiptron.a, libiphsl.a) and put
it (by default, unless one speficies the --prefix flag for configure) into
the 'lib' subdirectory of the directory, where the Ipopt configure script
was run.

Therefore, the ipopt.liblist should only have something in it like

-L$IPOPT/lib -lipopt

This is the content of the ipopt.liblist file that is automatically
generated when you type 'make cuter' in the Ipopt directory (maybe it also
contains -llapack and/or -lblas if LAPACK or BLAS was not compiled as part
of the Ipopt compilation, but found on the system elsewhere)

One example of the intended usage of the libraries can be found in the
Makefile in

EXAMPLES/Fortran_example

(after a make install)

> Now in $MYCUTER/bin/ipopt we should have (line 168)
>
> SETENV SYSLIBS = "`cat $MYCUTER/double/lib/ipopt.liblist`"
>
> and a few lines below (line 182)
>
> SETENV PACKOBJ = ""  # nothing

I guess this applies also for the automatically generated ipopt.liblist
file and maybe this is all that Lihong has to change.

> Andreas, shame on me, I haven't yet tried the C++ IPOPT. Does the CUTEr
> interface also work with ipopt.liblist? If so, should it also be fixed?

I included CUTEr scripts for the C++ version (called 'sdipo' and 'ipo'),
which are automatically processes and copied when you type

make cuter

after a make install in the new C++ version.  I hope those scripts are
along the lines that you would usually include in your CUTEr distribution.

So, for the new C++ verion of Ipopt, after you installed it (and had CUTEr
installed before), the "CUTER scripts" sdipo and ipo should be in
$MYCUTER/bin, and a user can solve SIF problems with the new Ipopt code by
typing

sdipo FILE.SIF

I hope this helps,

Andreas




More information about the Coin-ipopt mailing list