即使是简单的小型Haskell程序也会变成巨大的可执行文件.
我已经编写了一个小程序,它被编译(用GHC)到二进制文件,大小扩展到7 MB!
甚至可以将一个小的Haskell程序编译成巨大的二进制文件?
如果有的话,我可以做些什么来减少这个?
我是Yesod的新手,我无法静态构建Yesod,因此我可以部署到Heroku.
我更改了默认的.cabal文件以反映静态编译
if flag(production)
cpp-options: -DPRODUCTION
ghc-options: -Wall -threaded -O2 -static -optl-static
else
ghc-options: -Wall -threaded -O0
Run Code Online (Sandbox Code Playgroud)
它不再构建.我得到了一大堆警告,然后是一大堆未定义的引用,如下所示:
Linking dist/build/personal-website/personal-website ...
/usr/lib/ghc-7.0.3/libHSrts_thr.a(Linker.thr_o): In function
`internal_dlopen':
Linker.c:(.text+0x407): warning: Using 'dlopen' in statically linked
applications requires at runtime the shared libraries from the glibc
version used for linking
/usr/lib/ghc-7.0.3/unix-2.4.2.0/libHSunix-2.4.2.0.a(HsUnix.o): In
function `__hsunix_getpwent':
HsUnix.c:(.text+0xa1): warning: Using 'getpwent' in statically linked
applications requires at runtime the shared libraries from the glibc
version used for linking
/usr/lib/ghc-7.0.3/unix-2.4.2.0/libHSunix-2.4.2.0.a(HsUnix.o): In
function `__hsunix_getpwnam_r':
HsUnix.c:(.text+0xb1): warning: Using 'getpwnam_r' in …Run Code Online (Sandbox Code Playgroud) 我发现Haskell中的Hello World可执行文件是1.3 MB,我感到非常失望.这对我来说真是不可接受.难道我做错了什么?让hello world可执行文件如此庞大有什么借口?是否有合理的方法来减少这种情况?C中的相同内容是8 kb.
main = print "Hello, worlds"
Run Code Online (Sandbox Code Playgroud)