即使是小的Haskell程序也变成了巨大的可执行文件。 我已经编写了一个小程序,这个程序是用GHC编译的,大小为7MB。 什么可以导致一个小的Haskell程序被编译成巨大的二进制文件? 如果有的话,我能做些什么来减less这种情况?
在C ++中创build类库时,可以selectdynamic(.dll)和静态(.lib)库。 他们之间有什么区别,什么时候使用哪一个是适当的?
我经常听到“静态链接”和“dynamic链接”这两个术语,通常涉及用C , C ++或C#编写的代码,但对于这两者我都不太了解。 他们究竟是什么,他们到底在说什么,他们之间有什么联系?
我对Yesod非常陌生,而且我很难静态构buildYesod,所以我可以部署到Heroku。 我已经改变了默认的.cabal文件来反映静态编译 if flag(production) cpp-options: -DPRODUCTION ghc-options: -Wall -threaded -O2 -static -optl-static else ghc-options: -Wall -threaded -O0 它不再build立。 我得到了一大堆警告,然后是一堆未定义的引用,如下所示: 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' […]
在某些情况下,是否有任何令人信服的性能原因来选择通过动态链接进行静态链接,反之亦然? 我听过或读过以下内容,但是我对这个问题的认识还不够充分。 1)静态链接和动态链接之间的运行时性能差异通常可以忽略不计。 2)(1)如果使用分析编译器使用配置文件数据来优化程序热路径,因为使用静态链接,编译器可以优化代码和库代码。 通过动态链接,只有你的代码可以被优化。 如果大部分时间用于运行库代码,这可能会产生很大的差异。 否则,(1)仍然适用。