Enlace estático GMP a una aplicación Haskell usando GHC(+ LLVM)
static-linking cabal (1)
Si pasa -optl-static -optl-pthread
a GHC, enlazará estáticamente todas las dependencias de la biblioteca en tiempo de ejecución, incluido GMP. Configurando ld-options: -static -pthread
en tu archivo Cabal debería lograr lo mismo.
Eso significa que vinculará estáticamente en glibc también, pero eso probablemente no será un problema, aunque podría aumentar un poco el tamaño del binario. Usar una libc alternativa como musl o uClibc debería ayudar a contrarrestar eso, si es un problema para usted.
¿Cómo puedo eliminar la dependencia dinámica en
libgmp
y pasar de esto?linux-vdso.so.1 => (0x00007fffdccb1000) libgmp.so.10 => /usr/lib/x86_64-linux-gnu/libgmp.so.10 (0x00007fb01afc1000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fb01acc7000) librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fb01aabe000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fb01a8ba000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fb01a69d000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fb01a2df000) /lib64/ld-linux-x86-64.so.2 (0x00007fb01b249000)
a esto (actualmente deseado):
linux-vdso.so.1 => (0x00007fffdccb1000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fb01acc7000) librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fb01aabe000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fb01a8ba000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fb01a69d000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fb01a2df000) /lib64/ld-linux-x86-64.so.2 (0x00007fb01b249000)
de una manera limpia y portátil que simplemente funciona en todas las distribuciones de GNU / Linux (y no estropear con BSD (incluido OS X))?
¿Ve alguna otra dependencia que pueda causar problemas en la lista actualmente deseada como se indicó anteriormente cuando se distribuye un solo binario Haskell dirigido a múltiples distribuciones de GNU / Linux?
Notas:
- mi aplicación es GPLv3 por lo que no surgen problemas de violación de licencia con respecto a GMP
- Especificar una ruta a
libgmp.a
no funciona ( ¿Cómo vincular selectivamente ciertas bibliotecas del sistema de forma estática con el binario del programa Haskell? ),libgmp
sigue apareciendo en la salida deldd
.