Статически связать GMP с приложением Haskell, используя GHC (+ LLVM)
Как я могу отбросить динамическую зависимость от
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))?
Видите ли вы какие-либо другие зависимости, которые могут вызвать проблемы в текущем желаемом списке, как указано выше, при распространении одного двоичного файла Haskell, предназначенного для нескольких дистрибутивов GNU/Linux?
Заметки:
- мое приложение GPLv3, поэтому в отношении GMP не возникает проблем с нарушением лицензии
- Указание пути к
libgmp.a
не работает ( Как выборочно связать определенные системные библиотеки статически в двоичный файл программы на Haskell?),libgmp
все еще указан вldd
выход.
1 ответ
Если вы пройдете -optl-static -optl-pthread
для GHC он будет статически связывать все зависимости библиотеки времени выполнения, включая GMP. настройка ld-options: -static -pthread
в вашем файле Cabal следует выполнить то же самое.
Это означает, что вы будете статически связывать и в glibc, но это, вероятно, не будет проблемой, хотя это может немного увеличить размер двоичного файла. Использование альтернативного libc, такого как musl или uClibc, должно помочь вам противостоять этому, если это проблема для вас.