配置环境
UNIX-Like的操作系统(例如Linux的各个发行版/*BSD/macOS)下的编译步骤及依赖大体相同,如下所示
基础依赖
这些依赖是无关编译选项的基础编译依赖
- cmake(3.10 以上)
- protobuf (3.0 以上)
- 指protobuf库以及protobuf编译器。版本号使用
protoc --version
打印出来。 - 在某些Linux发行版上这两个包是分开发布的,需要手动安装
- Ubuntu需要分别安装
libprotobuf-dev
以及protobuf-compiler
两个包 - Mac OS 上使用
brew install protobuf
进行安装
- 指protobuf库以及protobuf编译器。版本号使用
- C++编译器
- GCC或Clang皆可 (macOS无需另外安装,Xcode自带)
- GCC推荐版本4.9以上
- 在某些发行版上GCC (GNU C编译器)和G++(GNU C++编译器是分开安装的)。
- 同样以Ubuntu为例,需要分别安装
gcc
和g++
- Clang 推荐版本3.9以上
- GCC推荐版本4.9以上
- GCC或Clang皆可 (macOS无需另外安装,Xcode自带)
zlib
- MacOS在指定MNN_BUILD_SHARED_LIBS=OFF时编MNNConvert需要zlib静态库,MacOS上默认的zlib只有动态库,所以需要
brew install zlib
# 自行安装的zlib库如果想被pkg-config工具找到,需要设置PKG_CONFIG_PATH环境变量
# 可以在当前shell内临时修改PKG_CONFIG_PATH
export PKG_CONFIG_PATH="/usr/local/Cellar/zlib/{version}/lib/pkgconfig:$PKG_CONFIG_PATH"
# 或者修改~/.bash_profile使得其他shell也生效
echo "export PKG_CONFIG_PATH=/usr/local/Cellar/zlib/{version}/lib/pkgconfig:\$PKG_CONFIG_PATH" >> ~/.bash_profile
编译选项相关依赖
- MacOS在指定MNN_BUILD_SHARED_LIBS=OFF时编MNNConvert需要zlib静态库,MacOS上默认的zlib只有动态库,所以需要
OpenCL
- macOS下CMake会自动检测,但Apple已经在10.15 Catalina中彻底移除OpenCL支持
- Linux下你需要
ocl-icd-opencl-dev
以及特定厂商的ICD包- Nvidia:
nvidia-opencl-dev
- AMD:
amd-opencl-dev
- Nvidia:
- Vulkan
libvulkan-dev
- OpenGL
- Linux下不支持
具体步骤
cd MNN/
./schema/generate.sh
mkdir build
cd build
cmake .. -DMNN_BUILD_CONVERTER=true && make -j4
编译产物包含模型转换工具MNNConvert
和模型输出工具MNNDump2Json.out
。