Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

[Caml-list] Is there a way to statically link an ocaml app compiled to native code against glibc?

486 views
Skip to first unread message

Eric Merritt

unread,
Nov 28, 2007, 7:06:46 PM11/28/07
to caml-list
Everyone,

I have spent quite a bit of time digging around for this on the net
with now luck. We have a pretty simple ocaml app for which we would
like to distribute an executable binary. For the most part this works.
However, we would like to minimize the number of binaries that we are
forced to distribute. We would also like to avoid any confusion on the
part of our users around figuring out which version of glibc they are
using. For example, we would like to avoid distributing a binary for
each version of glibc available. Its more work for us and has a chance
of confusing some of the folks using our work. Considering the
simplicity of our binary it seems like a good solution would be to be
to just statically link against glibc (our only non-ocaml dependency).
So it would be great if someone could give me pointers to docs that
describe how to do this. Extra points if I can easily do this with
OCamlMakefile. If there is another way to accomplish our goals I am
more then willing to entertain them, as there are a lot of potential
problems involved with static linking against glibc.

Thanks,
Eric

_______________________________________________
Caml-list mailing list. Subscription management:
http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
Archives: http://caml.inria.fr
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs

Gerd Stolpmann

unread,
Nov 28, 2007, 7:18:50 PM11/28/07
to Eric Merritt, caml-list
Am Mittwoch, den 28.11.2007, 16:06 -0800 schrieb Eric Merritt:
> Everyone,
>
> I have spent quite a bit of time digging around for this on the net
> with now luck. We have a pretty simple ocaml app for which we would
> like to distribute an executable binary. For the most part this works.
> However, we would like to minimize the number of binaries that we are
> forced to distribute. We would also like to avoid any confusion on the
> part of our users around figuring out which version of glibc they are
> using. For example, we would like to avoid distributing a binary for
> each version of glibc available. Its more work for us and has a chance
> of confusing some of the folks using our work. Considering the
> simplicity of our binary it seems like a good solution would be to be
> to just statically link against glibc (our only non-ocaml dependency).
> So it would be great if someone could give me pointers to docs that
> describe how to do this. Extra points if I can easily do this with
> OCamlMakefile. If there is another way to accomplish our goals I am
> more then willing to entertain them, as there are a lot of potential
> problems involved with static linking against glibc.

Install some oldish distro somewhere, and link against glibc-2.1. This
should run everywhere. At least, this is what the glibc people say about
the compatibility of their library.

Gerd
--
------------------------------------------------------------
Gerd Stolpmann * Viktoriastr. 45 * 64293 Darmstadt * Germany
ge...@gerd-stolpmann.de http://www.gerd-stolpmann.de
Phone: +49-6151-153855 Fax: +49-6151-997714
------------------------------------------------------------

Garrett Jones

unread,
Nov 29, 2007, 12:15:04 AM11/29/07
to Eric Merritt, caml-list
(resending to include the list)

This setting works for me with OCamlMakefile:

LDFLAGS = -Wl,-Bstatic

Sylvain Le Gall

unread,
Nov 29, 2007, 4:37:26 AM11/29/07
to caml...@inria.fr
On 29-11-2007, Eric Merritt <cybe...@gmail.com> wrote:
> Everyone,
>
> I have spent quite a bit of time digging around for this on the net
> with now luck. We have a pretty simple ocaml app for which we would
> like to distribute an executable binary. For the most part this works.
> However, we would like to minimize the number of binaries that we are
> forced to distribute. We would also like to avoid any confusion on the
> part of our users around figuring out which version of glibc they are
> using. For example, we would like to avoid distributing a binary for
> each version of glibc available. Its more work for us and has a chance
> of confusing some of the folks using our work. Considering the
> simplicity of our binary it seems like a good solution would be to be
> to just statically link against glibc (our only non-ocaml dependency).
> So it would be great if someone could give me pointers to docs that
> describe how to do this. Extra points if I can easily do this with
> OCamlMakefile. If there is another way to accomplish our goals I am
> more then willing to entertain them, as there are a lot of potential
> problems involved with static linking against glibc.
>

Other people had already give you some advices on how to achieve a static
link against glibc.

I would like to WARN you against this. I have some pretty bad
experiences with using static glibc in my binaries. It seems to have
something to do with the fact that:
* top bugs of glibc (in BUGS in the orginal tarball

[ **] Closing shared objects in statically linked binaries most of the
times leads to crashes during the dlopen(). Hard to fix.

** is medium severity.

* whatever you will statically linked, you will always have to load
ld-linux.so -- which makes you fall into the top bug of glibc

* you will have to include NSS into your code (so it won't be
possible to use system NSS).

All in all, you could get really strange behavior by using a statically
linked glibc into your code. Of course, this also should not happen...

Regards,
Sylvain Le Gall

0 new messages