Как выборочно связать определенные системные библиотеки статически в двоичный файл программы на Haskell? - PullRequest
15 голосов
/ 20 октября 2011

Я сейчас разрабатываю какое-то веб-приложение, написанное на Haskell.Все библиотеки Haskell статически связаны;хотя это «раздувает» исполняемый файл, это не такая большая проблема, поскольку это будет единственная программа на Haskell, работающая на сервере.

Однако я также хотел бы избавиться от зависимости от libgmp.so, т.е. я хотел бы также статически связать библиотеку multiprecision с программой, но динамически связывать все другие системные библиотеки (такие как pthread, libc и libm).

Какой компоновщик переключается на ghc doэтот трюк?

РЕДАКТИРОВАТЬ, чтобы учесть побочный вопрос

Можно ли отключить связывание по умолчанию стандартных библиотек, которые по умолчанию добавляются в каждую программу на Haskell?Что-то вроде GCC-эквивалентного -nostdlib?

Ответы [ 2 ]

9 голосов
/ 20 октября 2011

dcoutts опубликовал это как комментарий Reddit:

Вы можете сделать то же самое с GHC.

gcc -c prog.c -o prog.o
gcc prog.o libfoo.a -o prog

и вот, с GHC этото же самое ...

ghc -c prog.hs -o prog.o
ghc prog.o libfoo.a -o prog 
6 голосов
/ 20 октября 2011

Вы можете использовать -optl для передачи параметров непосредственно компоновщику, поэтому, чтобы связать все статически, вы можете использовать:

ghc --make Main.hs -optl-static -optl-pthread

или поместить их в GHC-Options, если вы используете Cabal.

Вероятно, вы можете настроить этот параметр, чтобы иметь более точный контроль над тем, что связывать статически или динамически.Параметр -v (подробный) полезен для просмотра последней команды компоновщика.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...