[Coin-ipopt] Re: [Coin-discuss] IPOPT: build and linking questions
Stefan Vigerske
stefan at vigerske.de
Sun Jul 22 21:36:18 EDT 2007
Hi,
shouldn't this go to the IPOPT mailing list?
> To build IPOPT, I have extracted the IPOPT tarball then unzipped MUMPS
> 4.7.3 to the directory ThirdParty/Mumps/MUMPS and then run "./configure
> && make && make install" in the top-level IPOPT directory. This is on
> Fedora 7.
>
> After compiling, I get a libipopt.so installed, but it has numerous
> undefined symbols in it. The missing symbols (using 'nm') come from
> libgfortran, liblapack, libblas and libpthread. I notice (using 'ldd')
> that the resulting library is not linked to any of those libraries.
> Should I really be seeing these undefined symbols? I discovered that in
> order to compile a trivial test program against libipopt I needed to set
> compiler flags to link all these libraries, when I would have expected
> only to have to link to ipopt, and for the other dependencies to follow
> automatically.
>
Yes, you have to see these undefined symbols. When I'm right, then this
has something todo with using Ipopt in other coin-projects that also
depend on blas, lapack or others and to avoid double inclusion.
After the "make install" you get files ipopt_addlibs_cpp.txt and
ipopt_addlibs_f.txt in the lib subdirectory that tell you exactly which
libraries you have to link together with the ipopt library, and which
flags to use, so you can just add a `cat ipopt_addlibs_cpp.txt` on the
compiler call that links the ipopt library.
> Secondly, thinking about how I can package IPOPT in such a way that it
> doesn't include statically-linked copies of other software: is it
> possible that I can build IPOPT to dynamically link against a MUMPS
> shared library installed somewhere on my system, rather than having
> IPOPT build its own private copy? It seems that there would need to be
> more './configure' options to facilitate that. The motivation for this
> is that MUMPS is a big package and shouldn't need rebuilding for each
> new IPOPT version. Also, if IPOPT were to eventually become an
> 'official' RPM or Debian package (license conditions permitting), it
> would probably not be allowed to include statically linked copies of
> other libraries.
>
I'm not sure I understand this right and can answer this right. If you
want to link your own MUMPS library together with the Ipopt library,
then that should work. The symbols defined by libcoinmumps.so are not
different from them defined in a self-compiled MUMPS package (maybe some
less files are included in libcoinmumps.la), so if libipopt.so does not
already include the MUMPS library (I'm not sure about this), then you
should be able to link your own mumps lib.
Also note the -with-mumps-dir option of the configure script which you
can use to specify the directory of your own mumps library.
It is planned (first for HSL), to make it possible to create an ipopt
library that contains only the symbols of the linear solver, and then
load dynamically a library defining this symbol while ipopt is running
and requires the specific symbol. This should make it possible to create
an Ipopt binary (or library) that contains no or only free linear
solvers, and the user can provide a shared library of some (not-so-free)
linear solver that is then used by Ipopt. However, there are just plans
to do this, that might take some time...
Best,
Stefan
More information about the Coin-ipopt
mailing list