最近話題のgRPCを、MSVC++(2013)でビルドしてみた。一応動作まではさせてるけど、長くなるのでこのTIPSではビルドまでとする。もうβなのに、Windowsで使おうとすると色々バグっぽいものがあった。
環境
このTIPSでは、以下の環境を使用して評価・検証を行っている。
項目 | 内容 |
---|---|
OS | Windows 10 pro 32bit (Parallel Desktop) |
Machine | MacBook Pro (Retina, 13-inch, Mid 2014) |
MSVC++ | 2013 update5 |
CMake | 3.3.1 |
gRPC | Beta Release 0.11.0 |
protobuf | Version 3.0.0-beta-1 |
ビルド
gRPCを適当なフォルダにgit cloneしてくる。
gRPCは様々なsubmoduleを持っているので、悪いこと言わんからZIPとかで落とさないこと。
protobufのビルド
grpはprotobufのv3以上に依存している。opensslとかは、gRPC内のvsprojectでNugetパッケージ指定されているので自動で持ってきてくれるが、protobufは自分でビルドしないといけなかった。protobuf v3にはvsprojectが含まれていないので、CMakeList.txtからvsprojectを生成する必要がある。
なお、当初MSVC++ 2015を使ってビルドしようとしたが、Releaseモードのみリンクエラーが出てビルドできなかった。調べてみると、自分だけではないみたい。仕方がないのでMSVC++2013をインストールしたけど、今はもう直ってるくさい(未確認)
cmakeでvsprojectを生成
cmakeを起動して、ソースコードディレクトリとビルドディレクトリを指定する。両方とも、protobufのcmakeフォルダを指定すること。(grpc/third-party/protobuf/cmake)
指定したら真ん中あたりのConfigureボタンを押す。
生成するvsprojectのバージョンを選んでしばらくすると、エラーがでる。これは依存するテスト関連モジュールが見つからないかららしい。BUILD_TESTのチェックを外して再度Configureを押す。さらっとConfigure Doneと言ってくるのですかさずGenerate。
ビルドする
grpc/third-party/protobuf/cmake配下に生成されたprotobuf.slnを開き、ビルドする。
細かいことは考えなくてよいはず。
gRPCのビルド
したごしらえ
gRPCにはvsprojectsが付属しているので、ポチポチ押すだけでビルドできる。ところが、ビルドは成功するんだけどクライアント側の動作に問題がでる。この問題は既にGitHubにissueとして上がっていて、vsprojectを変更することで回避できる。具体的には、拡張子がvcxprojなファイルに含まれる全ての"_USE_32BIT_TIME_T;"を、""に置換してやればいい。(ダブルコーテーションは説明用につけてる。実際は含まない)該当箇所は数千箇所あるので、sakuraなりなんなりでgrep置換しよう。
ビルドする
grpc/vsprojects配下の
grpc.sln
grpc_csharp_ext.sln
grpc_protoc_plugins.sln
をそれぞれ開いてビルドする。
Release-DLLとかDebug-DLLとかいうビルドモードがあるが、C#用のビルドオプションであり、C++向けのDLLにしてくれるわけではないようだ。
以上でビルドが完了するはず。お疲れ様でした。