En faisant une vcbuild.bat Release
, je vais avoir un répertoire lib comme celui-ci:
$ 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
Le débogage est beaucoup mieux, mais toujours:
$ 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
Deux choses que je ne comprends pas de tout cela:
Je suis sur Windows 7 64 bits.
Edit Je viens de comprendre que le target_arch
par défaut est ia32
, pas x64
, quelle que soit l’architecture de la machine hôte. Les chiffres ci-dessus se rapportent donc à une version 32 bits. Les numéros 64 bits sont un peu plus gros (309 M / 128 M).
Pourquoi la v8 est-elle si grande?
Est-ce peut-être à cause de ses dépendances et de ses fonctionnalités? Comme:
$ 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 comstackr.obj 3.7M isolate.obj 3.5M v8.obj 3.4M lithium.obj 3.3M heap.obj 3.3M api.obj
Pourtant, semble un peu gros …
Pourquoi une version Debug génère-t-elle des fichiers lib beaucoup plus petits?
Est-ce que ce sont peut-être ces optimisations de vitesse que j’ai trouvées dans common.gypi
?
'Release': { ... 'msvs_settings': { 'VCCLComstackrTool': { 'RuntimeLibrary': 0, # static release 'Optimization': 3, # /Ox, full optimization 'FavorSizeOrSpeed': 1, # /Ot, favour speed over size 'InlineFunctionExpansion': 2, # /Ob2, inline anything eligible
Il m’a fallu du temps pour comprendre pourquoi le moteur V8 construisait de telles versions sur Windows.
Il y a une option -D “component = shared” que vous pouvez utiliser lors de la construction de V8 pour créer une lib plus petite v8.lib (~ 250kb) et les DLL nécessaires à V8.dll (~ 12mb), icui18n.dll (~ 2.5mb), 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
La vraie réponse est que vous n’avez pas choisi l’option de publication “release”. Le mode de libération réduit considérablement la taille.