Building MxNet with CPP_PACKAGE on Windows10 (2019-07-23)

Hello. I’m visionNoob.
I think many people are struggling with building MxNet on win10, including me.
Finally, I (partially) succeed in building MxNet on win10.

Environment

Windows 10 Education
Visual Studio 2015
python 3.6(7.5.0)
Nvidia CUDA 9.0(V9.0.176)
Intel® MKL 2019(V2019.4.245)
OpenCV 4.1.0(released in 2019-04-08)

contents

1. MxNet

I cloned MxNet source from https://github.com/Vigilans/incubator-mxnet/tree/patch-1 (not merged yet)
see PR #15144
this branch handle several issues( #14116, #15143) that make failure in generated op.h.

2. Visual Studio 2015(vc14)

I think CUDA Visual Studio Integration is also needed for stable building for cuda.
And update 3 also needed.

3. OpenCV

I use “OpenCV 4.1.0 official release version” not build from source. I tried to use OpenCV that builds myself with extra-modules but with this, fail to build mxnet. I don’t know why.

4. Cmake version

I use latest version of Cmake, 3.15.0. it’s fine.

5. Cmake configuration

my configuation is below

you have to set some paths and disable/enable some options.
please refer from the screen shots below.
screenshots here (https://github.com/visionNoob/incubator-mxnet/issues/1)

6. In my case, I generated “op.h” manually .

it’s very simple
OpWrapperGenerator.py generate “op.h” in “…\incubator-mxnet\cpp-package\include\mxnet-cpp\op.h”
The location of OpWrapperGenerator.py is
…\incubator-mxnet\cpp-package\scripts\OpWrapperGenerator.py

go to the directory and

python OpWrapperGenerator.py "\your\build\Release\libmxnet.dll"

then “op.h” is generated in “…\incubator-mxnet\cpp-package\include\mxnet-cpp\op.h”

If you see this sentences(below) during generation, You fail to generate “op.h”.
I say it again. I downloaded mxnet source from Vigilans’s . and it maybe solve your problems.

1>argument "lrs" of operator "multi_sgd_update" has unknown type ", required"
1>argument "wds" of operator "multi_sgd_update" has unknown type ", required"
1>argument "lrs" of operator "multi_sgd_mom_update" has unknown type ", required"
1>argument "wds" of operator "multi_sgd_mom_update" has unknown type ", required"
1>argument "lrs" of operator "multi_mp_sgd_update" has unknown type ", required"
1>argument "wds" of operator "multi_mp_sgd_update" has unknown type ", required"
1>argument "lrs" of operator "multi_mp_sgd_mom_update" has unknown type ", required"
1>argument "wds" of operator "multi_mp_sgd_mom_update" has unknown type ", required"

7. Test your build!