Статически связать GMP с приложением Haskell, используя GHC (+ LLVM)

  1. Как я могу отбросить динамическую зависимость от libgmp и перейти от этого:

    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)
    

    на это (в настоящее время желательно):

    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)
    

    чистым и переносимым способом, который просто работает на всех дистрибутивах GNU/Linux (и не портит BSD (включая OS X))?

  2. Видите ли вы какие-либо другие зависимости, которые могут вызвать проблемы в текущем желаемом списке, как указано выше, при распространении одного двоичного файла Haskell, предназначенного для нескольких дистрибутивов GNU/Linux?


Заметки:

1 ответ

Решение

Если вы пройдете -optl-static -optl-pthread для GHC он будет статически связывать все зависимости библиотеки времени выполнения, включая GMP. настройка ld-options: -static -pthread в вашем файле Cabal следует выполнить то же самое.

Это означает, что вы будете статически связывать и в glibc, но это, вероятно, не будет проблемой, хотя это может немного увеличить размер двоичного файла. Использование альтернативного libc, такого как musl или uClibc, должно помочь вам противостоять этому, если это проблема для вас.

Другие вопросы по тегам