[Bonmin] how to build a completely static version version of
bonmin
Andreas Waechter
andreasw at watson.ibm.com
Thu Aug 10 17:33:10 EDT 2006
Hi,
I think the all-static linking issue is still not resolved...
Just for clarification:
On systems there the Makefiles can build shared libraries, those are build
by default. If one specifies the --disable-shared flag for configure, no
shared libraries are built, and instead static ones are generated. If one
specifies --enable-shared (and no --disable-shared) then both types of
libraries are built. See also
https://projects.coin-or.org/BuildTools/wiki/user-configure
If one wants to build a completely static version of Bonmin, one would
have to specify --disable-shared.
Linking everything static seems to be a bit of a hassle. I got it to work
now on a 64bit Linux machine, but I had to use some tricks. At some
point, we can provide a clean "-enable-all-static-compile" flag for
configure, but for now, please try the following:
1. Tell the Makefiles, that the '-all-static' flag should be given to
libtool for linking. Since this flag is not understood by the compilers
directly, we have to do that with a little detour, namely by setting the
environment variable AM_LDFLAGS to that value (which is then picked up
directly in the Makefiles, but ignored by configure).
Set the environment variable
setenv AM_LDFLAGS '-all-static' (for [t]csh)
or
export AM_LDFLAGS='-all-static' (for [ba]sh)
Note, this needs to be done every time in a shell in which 'make' is
executed!!!
2. Since the configure scripts try to find out the runtime libraries for
the Fortran compiler automatically, we need to tell the fortran compiler
that we want to generate static linking. For the GNU compiler, this is
done with the '-static' flag. We can add a flag for the Fortran compiler
using the ADD_FFLAGS variable.
configure --disable-shared ADD_FFLAGS='-static'
3. At least on the system I was working on, it seems that the libtool file
libstdc++.la sets the dependency of libstdc++.* to include -lgcc_s, but
this is incorrect for static linking... I simply changed the file
/usr/lib64/libstdc++.la
so that the line with dependency_libs reads:
dependency_libs=' -lm -lc'
I had to be root to do that. This is of course not nice, but for now
it might be a remedy...
> ../configure -C enable_static=yes enable_shared=no build_old_libs=yes
> build_libtool_libs=no
BTW, I don't think it is a good idea in general to try to overwrite
internal configure variables like build_old_libs and build_libtool_libs.
Please give it a try, and at some point I can implement a better generic
flag for configure.
Hope this helps,
Andreas
>
> followed by make..
>
> however, looking at the output of make, it looks like libgfortran.so is being
> linked to the solver instead of libgfortran.a:
>
> this is part of the last line of make:
> -L/usr/lib/../lib /usr/lib/libgfortranbegin.a /usr/lib/libgfortran.so -lm
> -lgcc_s
>
> how can I build a completely static version that has no soft links to any
> library build in.. I want to do this because I want to run bonmin on a
> different machine where the library libgfortran is not available at exactly
> the same place (/usr/lib)
>
> any help regarding this will be highly appreciated...
> thanks..
> Cheers,
> Abhishek.
> _______________________________________________
> Bonmin mailing list
> Bonmin at list.coin-or.org
> http://list.coin-or.org/mailman/listinfo/bonmin
>
More information about the Bonmin
mailing list