Статическая ссылка 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?
Примечания:
Ответы
Ответ 1
Если вы передадите -optl-static -optl-pthread
в GHC, он будет статически связывать все зависимости библиотеки времени выполнения, включая GMP. Установка ld-options: -static -pthread
в вашем файле Cabal должна выполнить одно и то же.
Это означает, что вы статически ссылаетесь на glibc тоже, но это, вероятно, не будет проблемой, хотя это может немного увеличить двоичный размер. Использование альтернативного libc типа musl или uClibc должен помочь противодействовать этому, если это проблема для вас.