当前位置: 首页 > web >正文

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

注意事项

  1. 多版本冲突:确保动态库和静态库安装在不同的路径,避免冲突。
  2. GPU 支持:如果你需要支持 GPU 加速(如 OpenCL 或 Vulkan),可以在 CMake 中启用相关选项。例如:
    -DMNN_OPENCL=ON
  3. 工具和示例:如果你需要编译 MNN 提供的工具或示例程序,可以将 -DMNN_BUILD_DEMO 和 -DMNN_BUILD_TOOLS 设置为 ON
http://www.xdnf.cn/news/1897.html

相关文章:

  • Java—ThreadLocal底层实现原理
  • uniapp-商城-36-shop 购物车 选好了 进行订单确认2 支付方式颜色变化和颜色滤镜filter
  • 将AAB转APK的两种好用方法AAB to APK Converter
  • 深入理解Java基本类型
  • 软考-软件设计师中级备考 1、计算机内数据的表示
  • 软件编程命名规范
  • Linux 官方蓝牙协议栈 BlueZ 第一篇:入门与架构概览
  • Fanotify学习
  • 基于深度学习的视频目标跟踪算法研究
  • Android 9.0上开发的,如果设置没启动wifi的话,安卓app如何启动wifi
  • cmake 执行命令
  • 《Java编程思想》读书笔记:第十章 内部类
  • vue3 使用 vite 管理多个项目,实现各子项目独立运行,独立打包
  • 生物医药行业中的APS计划排产系统:关键功能与应用
  • 微型计算机原理与接口技术第六版第四章课后习题答案-周荷琴,冯焕清-中国科学技术大学出版社
  • 12个HPC教程汇总!从入门到实战,覆盖分子模拟/材料计算/生物信息分析等多个领域
  • 深入剖析 Vue 双向数据绑定机制 —— 从响应式原理到 v-model 实现全解析
  • Cocos学习之资源动态加载
  • Nacos简介—2.Nacos的原理简介
  • 精益数据分析(22/126):解锁创业增长密码与长漏斗分析
  • 基于springboot的在线教育系统
  • 清理HiNas(海纳斯) Docker日志并限制日志大小
  • MoE架构解析:如何用“分治”思想打造高效大模型?
  • shell脚本3
  • 关于位运算的一些小记
  • 计算机基础 原码反码补码问题
  • exec和spawn
  • CSRF请求伪造
  • Pycharm(三):梯度下降法
  • java实现网格交易回测