树莓派5 raspberry pi 5 8G 车辆识别开发环境部署 vulkan mnn 2

# 备用 添加最新 Mesa 仓库(Ubuntu/Debian) del libgl1-mesa-glx  software-properties-common
sudo add-apt-repository ppa:kisak/kisak-mesa -y
sudo apt install git -y
================================================================
一、vulkan opencl安装 必备库安装
1、更新
sudo apt update && sudo apt upgrade -y
sudo apt update && sudo apt dist-upgrade -y
2、
sudo apt install -y flex bison cmake libopencv-dev python3-opencv ffmpeg nvtop git -y
3、
sudo mkdir /opt/openAI
sudo chown -R steven_roc:steven_roc /opt/openAI/
sudo chown -R steven_roc:steven_roc /opt/
4、
mkdir /opt/openAI/project
cd /opt/openAI/project
5、
tar zxvf MNN-3.5.0.tar.gz
tar zxvf HyperLPR-3.0.tar.gz
6、添加vulkal权限
sudo usermod -aG render $USER
newgrp render
sudo usermod -aG  video $USER
newgrp video
基础工具(你应该已有,保险起见列一下)
7、vulkan安装开发
#sudo apt install   vulkan-tools libvulkan-dev  mesa-utils  -y
#sudo apt upgrade  –reinstall  mesa-vulkan-drivers libvulkan1  libmosquitto-dev -y
#sudo apt install  build-essential cmake git pkg-config libprotobuf-dev protobuf-compiler -y
#sudo apt install -y flex bison cmake libopencv-dev python3-opencv ffmpeg nvtop
==============================================
#!/bin/bash
# ============================================
# 树莓派5 MNN-3.5.0 + Vulkan 环境完整依赖安装
# ============================================
# 1. 基础编译工具链
sudo apt update
sudo apt install -y \
build-essential \
flex \
bison \
cmake \
git \
pkg-config \
libopencv-dev \
python3-opencv \
ffmpeg \
nvtop

# Debian Sid 有独立 glslc 包(较新/不稳定) # glslang-tools 提供 glslangValidator 必须安装************** sudo apt install glslc glslang-tools
sudo apt install glslc glslang-tools opencl-headers ocl-icd-opencl-dev mesa-opencl-icd

不然出现下列错误
steven_roc@stevenroc-PCH:/opt/openAI/mnn/lib $ strings /opt/openAI/mnn/lib/libMNN.so | grep -i “spirv\|shader” | head -5
vkCreateShaderModule
vkDestroyShaderModule
VK_KHR_shader_float16_int8
Don’t find shader for %s
Create Vulkan Shader error: %d

# 2. 重新编译 MNN(步骤略)

# 2. Protocol Buffers (MNN 模型转换需要)
sudo apt install -y \
    libprotobuf-dev \
    protobuf-compiler
# 3. Vulkan 完整开发环境 (关键!)
sudo apt install -y \
    vulkan-tools \
    libvulkan-dev \
    libvulkan1 \
    mesa-vulkan-drivers \
# 4. 其他开发库
sudo apt install -y \
    libmosquitto-dev
sudo apt install -y g++ libmosquitto-dev libmosquittopp-dev
# 5. 强制刷新动态链接库缓存
sudo ldconfig
# 6. 验证 Vulkan 开发环境
echo “=== Vulkan 验证 ===”
vulkaninfo –summary 2>&1 | grep -A 5 “Device Properties”
pkg-config –exists vulkan && echo “✓ libvulkan-dev 已正确安装” || echo “✗ libvulkan-dev 缺失”
echo “=== 安装完成 ===”
=========================================
二、MNN-3.5.0安装
#1、
cd /opt/openAI/project/
#2、
cd MNN-3.5.0
#3、
rm -rf build
#4、
mkdir -p build && cd build
#5、cmake
# ========================================== 默认分离
cmake .. \
-DCMAKE_SYSTEM_NAME=Linux \
-DCMAKE_SYSTEM_PROCESSOR=aarch64 \
-DMNN_ARM82=ON \
-DMNN_OPENMP=ON \
-DMNN_VULKAN=ON \
-DMNN_OPENCL=ON \
-DMNN_OPENGL=OFF \
-DMNN_METAL=OFF \
-DMNN_CUDA=OFF \
-DMNN_BUILD_QUANTOOLS=OFF \
-DMNN_BUILD_BENCHMARK=ON \
-DMNN_BUILD_TEST=OFF \
-DMNN_BUILD_TOOLS=OFF \
-DMNN_BUILD_CONVERTER=OFF \
-DMNN_BUILD_DEMO=ON \
-DMNN_SEP_BUILD=ON \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_CXX_STANDARD=17 \
-DMNN_USE_SYSTEM_LIB=ON \
-DMNN_BUILD_SHARED_LIBS=ON \
-DCMAKE_INSTALL_PREFIX=/opt/openAI/mnn
参考如下,不分离
rm -rf build
cmake -B build -S . \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_CXX_STANDARD=17 \
-DMNN_ARM82=ON \
-DMNN_OPENMP=ON \
-DMNN_VULKAN=ON \
-DMNN_OPENCL=ON \
-DMNN_SEP_BUILD=OFF \
-DMNN_USE_SYSTEM_LIB=ON \
-DMNN_BUILD_SHARED_LIBS=ON \
-DMNN_CUDA=OFF \
-DMNN_BUILD_TEST=OFF \
-DMNN_BUILD_TOOLS=OFF \
-DCMAKE_INSTALL_PREFIX=/opt/openAI/mnn
# 6. 编译(树莓派5 4核全开,约15-20分钟)
make -j4
# 7. 安装到 /opt/openAI/mnn
sudo make install
# 8. 更新系统库缓存
sudo ldconfig
# 9. 验证安装成功
ls -lh /opt/openAI/mnn/lib/libMNN.so
# 10. 把 MNN 库路径加入系统配置
echo “/opt/openAI/mnn/lib” | sudo tee /etc/ld.so.conf.d/mnn.conf
# 11. 刷新系统库缓存(最关键)
sudo ldconfig
# 12. 立刻验证是否能找到
ldconfig -p | grep libMNN
权限:sudo chown -R steven_roc:steven_roc /opt/openAI
sudo chown -R steven_roc:steven_roc /opt/openAI
权限:root
/usr/local/lib/
# 13 开启 MNN_SEP_BUILD=ON 时,Vulkan/OpenCL 后端会被编译成独立的动态库,但 MNN 官方的 CMakeLists.txt
没有给这两个后端库添加安装规则,所以 make install 只会复制核心的 libMNN.so,不会自动复制 libMNN_Vulkan.so 和 libMNN_CL.so
手动复制两个文件如下
# 1. 先确认编译好的库文件存在
ls -lh /opt/openAI/project/MNN-3.5.0/build/source/backend/vulkan/libMNN_Vulkan.so
ls -lh /opt/openAI/project/MNN-3.5.0/build/source/backend/opencl/libMNN_CL.so
# 2. 复制到安装目录的 lib 文件夹
sudo cp /opt/openAI/project/MNN-3.5.0/build/source/backend/vulkan/libMNN_Vulkan.so /opt/openAI/mnn/lib/
sudo cp /opt/openAI/project/MNN-3.5.0/build/source/backend/opencl/libMNN_CL.so /opt/openAI/mnn/lib/
sudo cp /opt/openAI/project/MNN-3.5.0/build/source/backend/vulkan/libMNN_Vulkan.so /opt/openAI/mnn/lib/
sudo cp /opt/openAI/project/MNN-3.5.0/build/source/backend/opencl/libMNN_CL.so /opt/openAI/mnn/lib/
# 3. 刷新系统库缓存
sudo ldconfig# 4. 验证复制成功
ls -lh /opt/openAI/mnn/lib/14、环境变量配置建议(可选,推荐)
把 MNN 路径添加到你的 ~/.bashrc,方便以后编译其他程序:

echo 'export MNN_ROOT=/opt/openAI/mnn' >> ~/.bashrc
echo 'export CPLUS_INCLUDE_PATH=/opt/openAI/mnn/include:$CPLUS_INCLUDE_PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/opt/openAI/mnn/lib:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc

 

1)参考 不分离构建,Vulkan代码直接编译进主库 没有这个libMNN_Vulkan.so
  分离,去除注释
    -DCMAKE_CXX_STANDARD=17 \
-DVULKAN_INCLUDE_DIR=/usr/include \
-DVULKAN_LIBRARY=/usr/lib/aarch64-linux-gnu/libvulkan.so.1 \
    不分离,-DMNN_SEP_BUILD=OFF \
注意:一键编译脚本如下:
cd /opt/openAI/project/MNN-3.5.0
chmod 774 build_release_linux_mnn_share_SEP_BUILD.sh
chmod a+x build_release_linux_mnn_share_SEP_BUILD.sh
steven_roc@stevenroc-PCE:/opt/openAI/project/MNN-3.5.0 $ ./build_release_linux_mnn_share_SEP_BUILD.sh
#!/bin/bash
set -e

# ==========================================
# MNN-3.5.0 树莓派5 优化版一键安装脚本
# 源码路径:/opt/openAI/project/MNN-3.5.0(已存在)
# 安装路径:/opt/openAI/mnn
# ==========================================

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color

# 打印信息函数
print_info() {
    echo -e "${GREEN}[INFO]${NC} $1"
}

print_warn() {
    echo -e "${YELLOW}[WARN]${NC} $1"
}

print_error() {
    echo -e "${RED}[ERROR]${NC} $1"
}

print_section() {
    echo ""
    echo "============================================="
    echo -e "${GREEN}$1${NC}"
    echo "============================================="
}

# ==========================================
# 1. 前置检查
# ==========================================
print_section "1. 前置检查"

# 检查是否为 root
if [ "$EUID" -eq 0 ]; then 
    print_error "请不要用 root 直接运行此脚本,请用普通用户 + sudo"
    exit 1
fi

# 检查源码目录是否存在
MNN_SOURCE_DIR="/opt/openAI/project/MNN-3.5.0"
if [ ! -d "${MNN_SOURCE_DIR}" ]; then
    print_error "源码目录不存在: ${MNN_SOURCE_DIR}"
    exit 1
fi
print_info "✅ 源码目录确认: ${MNN_SOURCE_DIR}"

# 检查基础依赖
print_info "检查基础依赖..."
for cmd in git cmake make g++; do
    if ! command -v $cmd &> /dev/null; then
        print_error "缺少依赖: $cmd"
        print_info "请先运行: sudo apt update && sudo apt install -y git cmake build-essential libvulkan-dev vulkan-tools mesa-vulkan-drivers mesa-opencl-icd ocl-icd-opencl-dev opencl-headers libopencv-dev"
        exit 1
    fi
done
print_info "✅ 基础依赖检查通过"

# ==========================================
# 2. 定义路径
# ==========================================
print_section "2. 路径配置"
MNN_INSTALL_DIR="/opt/openAI/mnn"
print_info "源码目录: ${MNN_SOURCE_DIR}"
print_info "安装目录: ${MNN_INSTALL_DIR}"

# ==========================================
# 3. 编译安装
# ==========================================
print_section "3. 编译安装 MNN-3.5.0"
cd ${MNN_SOURCE_DIR}

# 清理旧 build 
print_info "清理旧的 build 目录..."
rm -rf build
mkdir -p build && cd build

# ==========================================
# CMake 配置(超详细参数说明) del -DMNN_BUILD_EXAMPLES=OFF \   
# -DMNN_SEP_BUILD=ON 分离 libMNN_Vulkan.so  /usr/local/lib/
#                         libMNN_CL.so      /usr/local/lib/ 
# DMNN_SEP_BUILD=OFF 不分离
# # 👇 核心修复:关闭系统库,启用内置着色器打包
# 致命错误:-DMNN_USE_SYSTEM_LIB=ON, 强制 MNN 使用系统第三方库,直接关闭 MNN 内置 Vulkan 着色器的自动编译 + 打包功能
# ==========================================
print_info "运行 CMake 配置(树莓派5 专用优化参数)..."
cmake .. \
-DCMAKE_SYSTEM_NAME=Linux \
-DCMAKE_SYSTEM_PROCESSOR=aarch64 \
-DMNN_ARM82=ON \
-DMNN_OPENMP=ON \
-DMNN_VULKAN=ON \
-DMNN_OPENCL=ON \
-DMNN_OPENGL=OFF \
-DMNN_METAL=OFF \
-DMNN_CUDA=OFF \
-DMNN_BUILD_QUANTOOLS=OFF \
-DMNN_BUILD_BENCHMARK=ON \
-DMNN_BUILD_TEST=OFF \
-DMNN_BUILD_TOOLS=OFF \
-DMNN_BUILD_CONVERTER=OFF \
-DMNN_BUILD_DEMO=ON \
-DMNN_SEP_BUILD=ON \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_CXX_STANDARD=17     \
-DMNN_USE_SYSTEM_LIB=OFF     \
-DMNN_BUILD_SHARED_LIBS=ON \
-DCMAKE_INSTALL_PREFIX=/opt/openAI/mnn

# ==========================================
# 编译
# ==========================================
print_info "开始编译(树莓派5 4核全开,约15-20分钟)..."
make -j4

# ==========================================
# 安装
# ==========================================
print_info "安装到 ${MNN_INSTALL_DIR}..."
sudo make install

# ==========================================
# 4. 配置系统库路径
# ==========================================
print_section "4. 系统库路径配置"
print_info "添加 MNN 库路径到系统配置..."
echo "${MNN_INSTALL_DIR}/lib" | sudo tee /etc/ld.so.conf.d/mnn.conf
sudo ldconfig
print_info "✅ 系统库缓存已刷新"

# ==========================================
# 5. 验证安装
# ==========================================
print_section "5. 安装验证"

# 验证库文件
print_info "验证库文件..."
if [ -f "${MNN_INSTALL_DIR}/lib/libMNN.so" ]; then
    print_info "✅ 核心库文件验证成功:"
    ls -lh ${MNN_INSTALL_DIR}/lib/libMNN.so
    
    # 如果是分离构建,也验证一下 Vulkan 库
    if [ -f "${MNN_INSTALL_DIR}/lib/libMNN_Vulkan.so" ]; then
        print_info "✅ Vulkan 后端库验证成功:"
        ls -lh ${MNN_INSTALL_DIR}/lib/libMNN_Vulkan.so
    fi
else
    print_error "❌ 库文件验证失败"
    exit 1
fi

# 验证系统能找到库
print_info "验证系统库缓存..."
if ldconfig -p | grep -q libMNN; then
    print_info "✅ 系统库缓存验证成功:"
    ldconfig -p | grep libMNN
else
    print_error "❌ 系统库缓存验证失败"
    exit 1
fi

# 验证头文件
print_info "验证头文件..."
if [ -f "${MNN_INSTALL_DIR}/include/MNN/Interpreter.hpp" ]; then
    print_info "✅ 头文件验证成功"
else
    print_error "❌ 头文件验证失败"
    exit 1
fi

# ==========================================
# 6. 完成
# ==========================================
print_section "6. 安装完成"
echo ""
echo "============================================="
echo -e "${GREEN}🎉 MNN-3.5.0 安装成功!${NC}"
echo "============================================="
echo "📦 安装目录: ${MNN_INSTALL_DIR}"
echo "📁 头文件目录: ${MNN_INSTALL_DIR}/include"
echo "📚 库文件目录: ${MNN_INSTALL_DIR}/lib"
echo ""
echo "🔧 环境变量配置建议(添加到 ~/.bashrc):"
echo "  export MNN_ROOT=${MNN_INSTALL_DIR}"
echo "  export CPLUS_INCLUDE_PATH=${MNN_INSTALL_DIR}/include:\$CPLUS_INCLUDE_PATH"
echo "  export LD_LIBRARY_PATH=${MNN_INSTALL_DIR}/lib:\$LD_LIBRARY_PATH"
echo ""
echo "📋 生成的库文件:"
if [ -d "${MNN_INSTALL_DIR}/lib" ]; then
    ls -lh ${MNN_INSTALL_DIR}/lib/
fi
echo "============================================="

 

 

2、开启 MNN_SEP_BUILD=ON 时,Vulkan/OpenCL 后端会被编译成独立的动态库,但 MNN 官方的 CMakeLists.txt
没有给这两个后端库添加安装规则,所以 make install 只会复制核心的 libMNN.so,不会自动复制 libMNN_Vulkan.so 和 libMNN_CL.so
手动复制两个文件如下

# 13 开启 MNN_SEP_BUILD=ON 时,Vulkan/OpenCL 后端会被编译成独立的动态库,但 MNN 官方的 CMakeLists.txt
#没有给这两个后端库添加安装规则,所以 make install 只会复制核心的 libMNN.so,不会自动复制 libMNN_Vulkan.so 和 libMNN_CL.so
#手动复制两个文件如下
# 1. 先确认编译好的库文件存在
ls -lh /opt/openAI/project/MNN-3.5.0/build/source/backend/vulkan/libMNN_Vulkan.so
ls -lh /opt/openAI/project/MNN-3.5.0/build/source/backend/opencl/libMNN_CL.so

# 2. 复制到安装目录的 lib 文件夹
sudo cp /opt/openAI/project/MNN-3.5.0/build/source/backend/vulkan/libMNN_Vulkan.so /opt/openAI/mnn/lib/
sudo cp /opt/openAI/project/MNN-3.5.0/build/source/backend/opencl/libMNN_CL.so /opt/openAI/mnn/lib/

sudo cp /opt/openAI/project/MNN-3.5.0/build/source/backend/vulkan/libMNN_Vulkan.so  /usr/local/lib/
sudo cp /opt/openAI/project/MNN-3.5.0/build/source/backend/opencl/libMNN_CL.so      /usr/local/lib/

# 3. 刷新系统库缓存
sudo ldconfig

# 4. 验证复制成功
ls -lh /opt/openAI/mnn/lib

权限:sudo chown -R steven_roc:steven_roc /opt/openAI
sudo chown -R steven_roc:steven_roc /opt/openAI
权限:root
/usr/local/lib/

3、环境变量配置建议(可选,推荐)
把 MNN 路径添加到你的 ~/.bashrc,方便以后编译其他程序:

echo 'export MNN_ROOT=/opt/openAI/mnn' >> ~/.bashrc
echo 'export CPLUS_INCLUDE_PATH=/opt/openAI/mnn/include:$CPLUS_INCLUDE_PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/opt/openAI/mnn/lib:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc

 

您可能还喜欢...

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注