v8_base.lib(作为node.js的一部分编译)是huuuuge。为什么?

时间:2012-08-08 03:17:54

标签: windows node.js v8

执行vcbuild.bat Release时,我会得到一个 lib 目录,如下所示:

$ ls -1Ssh Release/lib/
total 303M
263M v8_base.lib
 22M openssl.lib
7.2M v8_snapshot.lib
6.2M v8_nosnapshot.lib
4.8M uv.lib
480K zlib.lib
 88K http_parser.lib

调试要好得多,但仍然是:

$ ls -1Ssh Debug/lib/
total 102M
 83M v8_base.lib
 14M openssl.lib
2.1M uv.lib
1.6M v8_snapshot.lib
1.3M v8_nosnapshot.lib
352K zlib.lib
 80K http_parser.lib

我不明白这两件事:

  • 为什么v8 这个大?
  • 为什么Debug构建会产生更小的lib文件?

我使用的是Windows 7 64位。

修改我只是发现默认target_archia32,而不是x64,无论主机是什么架构。所以上面的数字指的是32位版本。 64位数字稍大(309M / 128M)。

3 个答案:

答案 0 :(得分:3)

  

为什么v8这么大?

是否可能是因为它的依赖性和功能?像:

$ ls -1Ssh Release/obj/v8_base/|head -15
total 264M
5.1M hydrogen.obj
4.7M objects.obj
4.6M lithium-codegen-ia32.obj
4.4M lithium-ia32.obj
4.3M runtime.obj
4.3M hydrogen-instructions.obj
4.2M lithium-allocator.obj
4.1M lithium-gap-resolver-ia32.obj
3.7M compiler.obj
3.7M isolate.obj
3.5M v8.obj
3.4M lithium.obj
3.3M heap.obj
3.3M api.obj

但是,看起来有点大......

  

为什么Debug构建会产生更小的lib文件?

这可能是我在common.gypi找到的速度优化吗?

  'Release': {
    ...
    'msvs_settings': {
      'VCCLCompilerTool': {
        'RuntimeLibrary': 0, # static release
        'Optimization': 3, # /Ox, full optimization
        'FavorSizeOrSpeed': 1, # /Ot, favour speed over size
        'InlineFunctionExpansion': 2, # /Ob2, inline anything eligible

答案 1 :(得分:2)

我花了一些时间来弄清楚为什么V8引擎在Windows上构建如此大的版本。

有一个选项-D“component = shared”,你可以在构建V8时创建一个较小的lib v8.lib(~250kb),dll需要V8.dll(~12mb),icui18n.dll(~2.5) mb),icuuc.dll(~1.5mb)。

From the V8 Directory:
third_party\python_26\python.exe build\gyp_v8 -G msvs_version=2010 -Dtarget_arch=x64 -D"component=shared" -G 

答案 2 :(得分:-2)

真正的答案是您没有选择“发布”构建选项。发布模式显着缩小了尺寸。