Ответ 1
dcoutts разместили это как комментарий reddit:
Вы можете сделать то же самое с ghc.
gcc -c prog.c -o prog.o
gcc prog.o libfoo.a -o prog
и lo, причем ghc это то же самое...
ghc -c prog.hs -o prog.o
ghc prog.o libfoo.a -o prog
В настоящее время я разрабатываю веб-приложение, написанное в Haskell. Все библиотеки Haskell статически связаны; хотя это "раздувает" исполняемый файл, это не так много проблемы, так как это будет единственная программа Haskell, запущенная на сервере.
Однако я также хотел бы избавиться от зависимости от libgmp.so
, то есть я хотел бы связать библиотеку multiprecice статически с программой, а также сохранить все остальные системные библиотеки (такие как pthread, libc, и libm) динамически связаны.
Какой компоновщик переключается на ghc, сделайте этот трюк?
Можно ли отключить привязку по умолчанию стандартных библиотек, которые по умолчанию потянуты в каждую программу Haskell? Что-то вроде GCC-эквивалента -nostdlib
?
dcoutts разместили это как комментарий reddit:
Вы можете сделать то же самое с ghc.
gcc -c prog.c -o prog.o
gcc prog.o libfoo.a -o prog
и lo, причем ghc это то же самое...
ghc -c prog.hs -o prog.o
ghc prog.o libfoo.a -o prog
Вы можете использовать -optl
для передачи параметров непосредственно компоновщику, поэтому для связывания всех статически вы можете использовать:
ghc --make Main.hs -optl-static -optl-pthread
или поместите их в GHC-Options
, если вы используете Cabal.
Вероятно, вы можете настроить это, чтобы иметь более тонкий контроль над тем, что нужно связывать статически или динамически. Опция -v
(verbose) полезна здесь, чтобы увидеть окончательную команду компоновщика.