October 5th, 2013

Book

Динамическая компоновка GHC на Linux и Windows

$ ghc -dynamic -O2 Hello.hs

$ ldd ./Hello
libHSbase-4.6.0.1-ghc7.6.3.so => /usr/lib/ghc-7.6.3/base-4.6.0.1/libHSbase-4.6.0.1-ghc7.6.3.so 

$ pacman -Qo /usr/lib/ghc-7.6.3/base-4.6.0.1/libHSbase-4.6.0.1-ghc7.6.3.so
/usr/lib/ghc-7.6.3/base-4.6.0.1/libHSbase-4.6.0.1-ghc7.6.3.so is owned by ghc 7.6.3-1

$ pacman -Qi ghc | grep Size
Installed Size : 549543.00 KiB
Короче, рантайм-библиотеки х-я ставятся на Арче в одном пакете с GHC. Для сравнения, рантайм-библиотеки GCC идут как у белых людей, в отдельном. Соответственно, написать динамически компонующуюся программу на Хаскеле и тянуть за собой 10 метров библиотек вместо пятиста - без хитростей не получится.

Падвендой ситуация даже хуже. Динамически собранный ./Hello под Линуксом запускается после сборки без особых движений, т.к. компоновщик поддерживает полные пути, и забирает сошки из нужных папок.

А вот под виндой полные пути не поддерживаются виндой. Вместо них есть SxS, который лучше и круче, и точно так же позволил бы сделать, чтобы динамически собраннные файлы запускались без телодвижений. Но в GHC поддержка SxS не реализована. Вместо этого длл-ки кладутся в те же места, что и под линуксом, что под виндой совершенно нежизнеспособно.

Короче, фейспалм, всё надо писать самому. И не надо писать что винда или дин. компоновка нинужна