趟坑:WIN7 + VS2015 编译 阿里MNN框架

Posted cvdream

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了趟坑:WIN7 + VS2015 编译 阿里MNN框架相关的知识,希望对你有一定的参考价值。

用过腾讯的ncnn,编译起来很友好;但是对3d操作算子支持不够;导致新出现的模型无法使用。

看到阿里开发的mnn,来尝尝鲜,结果断续折腾了2天,以此记之。

非常感谢:

https://uzshare.com/view/810473

https://www.yuque.com/mnn/cn/build_windows

里面详细介绍了一些配置操作。

 

1、设置

技术图片

 

2、将powershell ./schema/generate.ps1换成python ./schema/generate.py

如果要编译x64,将

os.system(‘cmake -DCMAKE_BUILD_TYPE=Release ..‘)

修改成

os.system(cmake -G "Visual Studio 14 2015 Win64" -DCMAKE_BUILD_TYPE=Release ..)

这个步骤也可以直接去

https://github.com/google/flatbuffers/releases

下flatc.exe, 在..MNN-master3rd_partyflatbuffers mpflatc.exe

 

3、cmake x64 only mnn.lib/mnn.dll

mkdir vs15x64 && cd vs15x64 
cmake  -G "Visual Studio 14 2015 Win64" -DCMAKE_BUILD_TYPE=Release ..
cd..
cmake --build vs15x64 --config Release

正常会有

error C2280: ‘std::unique_ptr<MNN::Pipeline,std::default_delete<_Ty>> &std::unique_ptr<_Ty,std::default_delete<_Ty>>::operator =(const std::unique_ptr<_Ty,std::default_delete<_Ty>> &)‘: attempting to reference a deleted function

解法:https://github.com/Hconk/MNN/commit/819a666135a420f680675d503fabfa14028e13d2

//Session.hpp

private:
    std::map<MNNForwardType, std::unique_ptr<Backend>> mBackends;
    std::vector<std::unique_ptr<Pipeline>> mPipelines;
    std::vector<std::pair<int, std::shared_ptr<Tensor>>> mTensors;
    std::map<std::string, Tensor*> mInputs;
    std::map<std::string, Tensor*> mOutputs;
    bool mNeedResize       = false;
    bool mValid            = true;
    Backend* mFirstBackend = nullptr;

    Session(const Session&) = delete;
    Session(const Session&&) = delete;
    Session& operator=(const Session&) = delete;
    Session& operator=(const Session&&) = delete;

 这样基本就可以获取MNN.lib 与MNN.dll了。

 

4、编译Conver Tool  【这个折腾我最久,好像爆粗口】

cmake  -G "Visual Studio 14 2015 Win64" -DCMAKE_BUILD_TYPE=Release -DMNN_BUILD_CONVERTER=ON -DMNN_BUILD_SHARED_LIBS=OFF ..

Q1、配置 protobuf

Win7 下,添加环境变量 protoc.exe 所在的路径,然后cmd下运行protoc.exe 

Q2、tflite错误

error lnk2019: error  flatbuffers::ClassicLocale flatbuffers::ClassicLocale::instance_" (?instance_@ClassicLocale@flatbuffers@@0V12@A)

解法:把MNN-master3rd_partyflatbufferssrcutil.cpp添加到tflite工程中

这样基本就可以编译过了

以上是关于趟坑:WIN7 + VS2015 编译 阿里MNN框架的主要内容,如果未能解决你的问题,请参考以下文章

Win7 64位 VS2015环境编译Libpng

Win7 VS2015编译wxWidgets-3.1.0

Win7 + VS2015 + Python3.6编译

CGAL库 Win7 + VS2015 + CMake3.6.1-GUI编译

Win7 VS2015简单编译FFMPEG播放器FFPlay

Win7 64位 VS2015及MinGW环境编译矢量库agg-2.5和cairo-1.14.6