non vorrei lavorare

ブログ名の通りです。javascript three.js mruby rust OCaml golang julialang blender

WindowsでV8のサンプルをコマンドラインでビルドして動かす

こんにちは暖かくなると奥さんの活動が活発化して、毎週どこかに出歩くようになり、今週もその 例外にもれず、子供たちは映画を見に行ったようで、自分は留守番してます。kjunichiです。

背景

plv8の昨年のプルリク、当時のV8だとSpectreやMeltdownの影響を受けてしまう。 そのまま放置ももったいないので、最新のコードに対応すべく、プルリクを更新しようと考えている。

今回はその第一歩として、plv8-2.3.0で採用されている版のV8をWindows環境で 動かすことを目標とした。

nugetでV8の取得

nuget.exe本体は

から取得できる。

nuget.exeをインストールして、以下を実行して、カレントディレクトリ配下に コンパイル済みのv8を取得する。

nuget install v8-v141-x64 -Version 6.4.388.11

実行すると、ヘッダと.libファイルの入ったv8-v141-x64.6.4.388.11というフォルダと dllが入ったv8.redist-v141-x64.6.4.388.11とうフォルダの2つが配下に作成される。

V8のサンプルコードの入手

linux boxでV8のビルドガイドに従い、ソースをfetch後、git checkout時にバージョンを上記の「6.4.388.11」として指定して取得する。

cl.exeで-lや-L相当の指定はどうするんだっけ

stackoverflow.com

/linkの後にリンカーへのオプションを指定できる模様。

-L相当のオプションは/LIBPATH:だった。 -l相当のオプションは分からず、直接指定して対応した。

cl /EHsc hello-world.cc /Iv8-v141-x64.6.4.388.11 /I v8-v141-x64.6.4.388.11\include v8.dll.lib v8_libbase.dll.lib v8_l ibplatform.dll.lib /link /LIBPATH:v8-v141-x64.6.4.388.11\lib\Release

動かない

こうして、作成されたexeファイルを実行するも以下のようなエラーダイアログが表示され、 実行できない。

f:id:kjw_junichi:20180325131410p:plain

解決方法を探る

github.com

のREADMEを読んでも、VS2017ならライブラリを追加するだけで、必要なことは他になくて、簡単にV8を組み込めるよ。と 記述しかなく、困った。

仕方ないので、VS2017を立ち上げて、プロジェクトを作って動かしてみたら、 なんとなくわかった。

作成したexeファイルと同じ階層にdll等が置かれていた。 真似して、コマンドラインで作業して作成したexeと同じディレクトリにdllやら.datファイルを コピーした。

copy v8.redist-v141-x64.6.4.388.11\lib\Release\*.* .

これで、動かうようになった。

f:id:kjw_junichi:20180325131207p:plain

関連記事

13年前の記事

4年前の記事