BTW, in case it wasn't clear with all this talk about static linking. OCaml links OCaml libraries statically, but C libraries dynamically. For example here is cduce, an OCaml program which uses many different libraries:
$ ldd `which cduce` libexpat.so.0 => /lib64/libexpat.so.0 (0x0000003c76e00000) libcurl.so.3 => /usr/lib64/libcurl.so.3 (0x0000003fb7000000) libgssapi_krb5.so.2 => /usr/lib64/libgssapi_krb5.so.2 (0x0000003fbaa00000) libkrb5.so.3 => /usr/lib64/libkrb5.so.3 (0x0000003fbb200000) libk5crypto.so.3 => /usr/lib64/libk5crypto.so.3 (0x0000003fbae00000) libcom_err.so.2 => /lib64/libcom_err.so.2 (0x0000003c79600000) libresolv.so.2 => /lib64/libresolv.so.2 (0x0000003c78600000) libdl.so.2 => /lib64/libdl.so.2 (0x0000003c73600000) libidn.so.11 => /usr/lib64/libidn.so.11 (0x0000003297800000) libssl.so.6 => /lib64/libssl.so.6 (0x0000003fbb600000) libcrypto.so.6 => /lib64/libcrypto.so.6 (0x0000003c79200000) libz.so.1 => /usr/lib64/libz.so.1 (0x0000003c74200000) librt.so.1 => /lib64/librt.so.1 (0x00000038b2200000) libpcre.so.0 => /lib64/libpcre.so.0 (0x0000003682000000) libm.so.6 => /lib64/libm.so.6 (0x0000003c73a00000) libc.so.6 => /lib64/libc.so.6 (0x0000003c73200000) libkrb5support.so.0 => /usr/lib64/libkrb5support.so.0 (0x0000003fba600000) /lib64/ld-linux-x86-64.so.2 (0x0000003c72e00000) libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003ff2400000) $ file `which cduce` /usr/bin/cduce: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.9, stripped
Rich.