Linux下编译MNN
1. 安装依赖
确保你的系统中安装了必要的依赖工具和库:
sudo apt update
sudo apt install -y build-essential cmake git
如果需要支持 GPU 或其他功能,可能还需要安装额外的依赖项(如 CUDA、OpenCL 等)。具体需求请参考 MNN 官方文档。
2. 获取 MNN 源码
克隆 MNN 的源代码仓库:
git clone https://github.com/alibaba/MNN.git
cd MNN
如果你想使用特定版本,可以切换到对应的分支或标签。例如:
git checkout <tag_or_branch_name>
3. 生成 FlatBuffers 的 C++ 文件
./schema/generate.sh
4. 创建构建目录
为了避免污染源码目录,建议创建一个单独的构建目录:
mkdir build_shared
mkdir build_static
5. 配置和编译动态库
(1) 进入动态库构建目录
cd build_shared
(2) 配置 CMake
运行以下命令配置 CMake,启用动态库构建:
cmake .. \-DCMAKE_BUILD_TYPE=Release \-DMNN_BUILD_SHARED_LIBS=ON \-DMNN_BUILD_DEMO=OFF \-DMNN_BUILD_TOOLS=OFF \-DCMAKE_INSTALL_PREFIX=/usr/local/mnn_shared
参数说明:
-DMNN_BUILD_SHARED_LIBS=ON
: 启用动态库构建。-DMNN_BUILD_DEMO=OFF
: 不编译示例程序(可选)。-DMNN_BUILD_TOOLS=OFF
: 不编译工具(可选)。-DCMAKE_INSTALL_PREFIX
: 指定安装路径。
(3) 编译动态库
运行以下命令进行编译:
make -j$(nproc)
(4) 安装动态库
编译完成后,安装动态库到指定路径:
sudo make install
6. 配置和编译静态库
(1) 进入静态库构建目录
cd ../build_static
(2) 配置 CMake
运行以下命令配置 CMake,启用静态库构建:
cmake .. \-DCMAKE_BUILD_TYPE=Release \-DMNN_BUILD_SHARED_LIBS=OFF \-DMNN_BUILD_DEMO=OFF \-DMNN_BUILD_TOOLS=OFF \-DCMAKE_INSTALL_PREFIX=/usr/local/mnn_static
参数说明:
-DMNN_BUILD_SHARED_LIBS=OFF
: 启用静态库构建。
(3) 编译静态库
运行以下命令进行编译:
make -j$(nproc)
(4) 安装静态库
编译完成后,安装静态库到指定路径:
sudo make install
7. 验证安装
(1) 动态库验证
检查动态库是否正确生成并安装:
ls /usr/local/mnn_shared/lib
你应该会看到类似 libMNN.so
的动态库文件。
(2) 静态库验证
检查静态库是否正确生成并安装:
ls /usr/local/mnn_static/lib
你应该会看到类似 libMNN.a
的静态库文件。
8. 使用动态库或静态库
(1) 使用动态库
当你使用动态库时,确保动态库路径已添加到系统的动态链接器缓存中:
sudo ldconfig
然后在编译项目时链接动态库即可。例如:
g++ my_program.cpp -I/usr/local/mnn_shared/include \-L/usr/local/mnn_shared/lib \-lMNN
(2) 使用静态库
在编译项目时,显式指定静态库路径和文件。例如:
g++ my_program.cpp -I/usr/local/mnn_static/include \-L/usr/local/mnn_static/lib \-lMNN -static
注意:
- 使用
-static
参数强制链接静态库。 - 确保链接所有必要的模块。
9. 清理(可选)
如果不再需要编译过程中的临时文件,可以清理它们:
make clean
注意事项
- 多版本冲突:确保动态库和静态库安装在不同的路径,避免冲突。
- GPU 支持:如果你需要支持 GPU 加速(如 OpenCL 或 Vulkan),可以在 CMake 中启用相关选项。例如:
-DMNN_OPENCL=ON
- 工具和示例:如果你需要编译 MNN 提供的工具或示例程序,可以将
-DMNN_BUILD_DEMO
和-DMNN_BUILD_TOOLS
设置为ON
。