交叉编译ncnn

本文详细讲述了在配置NCNN时遇到的编译问题,涉及如何在CMakeLists.txt中调整NCNN_SSE2和NCNN_AVX2选项以解决因不支持的指令集导致的错误,包括-msse2、-mfma等。通过将ON状态改为OFF,解决了编译过程中的错误并给出了解决步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、配置参数,点击configure

2、 点击generate

3、在终端输入make

出现的错误:1

Scanning dependencies of target ncnn
[ 29%] Building CXX object src/CMakeFiles/ncnn.dir/allocator.cpp.obj
arm-linux-gnueabihf-g++: error: unrecognized command line option ‘-msse2’
arm-linux-gnueabihf-g++: error: unrecognized command line option ‘-msse’; did you mean ‘-fdse’?
src/CMakeFiles/ncnn.dir/build.make:334: recipe for target 'src/CMakeFiles/ncnn.dir/allocator.cpp.obj' failed
make[2]: *** [src/CMakeFiles/ncnn.dir/allocator.cpp.obj] Error 1
CMakeFiles/Makefile2:86: recipe for target 'src/CMakeFiles/ncnn.dir/all' failed
make[1]: *** [src/CMakeFiles/ncnn.dir/all] Error 2
Makefile:129: recipe for target 'all' failed

解决办法:

在CMakeLists.txt中

option(NCNN_SSE2 "optimize x86 platform with sse2" ON)

替换为

option(NCNN_SSE2 "optimize x86 platform with sse2" OFF)

出现的错误:2

[ 12%] Building CXX object src/CMakeFiles/ncnn.dir/layer/x86/batchnorm_x86_avx2.cpp.obj
arm-linux-gnueabihf-g++: error: unrecognized command line option ‘-mfma’
arm-linux-gnueabihf-g++: error: unrecognized command line option ‘-mf16c’
arm-linux-gnueabihf-g++: error: unrecognized command line option ‘-mavx2’
src/CMakeFiles/ncnn.dir/build.make:982: recipe for target 'src/CMakeFiles/ncnn.dir/layer/x86/batchnorm_x86_avx2.cpp.obj' failed
make[2]: *** [src/CMakeFiles/ncnn.dir/layer/x86/batchnorm_x86_avx2.cpp.obj] Error 1
CMakeFiles/Makefile2:86: recipe for target 'src/CMakeFiles/ncnn.dir/all' failed
make[1]: *** [src/CMakeFiles/ncnn.dir/all] Error 2
Makefile:129: recipe for target 'all' failed
make: *** [all] Error 2

解决办法:

在CMakeLists.txt中

option(NCNN_AVX2 "optimize x86 platform with avx2" ON)

替换为

option(NCNN_AVX2 "optimize x86 platform with avx2" OFF)

### NCNNLinux环境下交叉编译教程 #### 准备工作 为了成功完成NCNN交叉编译,需先准备必要的工具和环境。确保已安装Git用于获取源代码,并准备好适用于目标架构(如AARCH64)的交叉编译工具链。 #### 获取源码 通过Git克隆官方仓库来获得最新的NCNN源代码: ```bash git clone https://github.com/Tencent/ncnn.git cd ncnn ``` #### 创建构建目录并设置CMake参数 创建专门用于存储编译文件的新建子目录`build-aarch64-linux`,这有助于保持项目结构清晰整洁。接着指定适合于特定硬件平台的CMake配置选项,特别是要指明使用的交叉编译工具链文件位置[^1]。 ```bash mkdir -p build-aarch64-linux cd build-aarch64-linux cmake \ -DCMAKE_TOOLCHAIN_FILE=../toolchains/aarch64-linux-gnu.toolchain.cmake .. ``` 这里假设已经有一个名为`aarch64-linux-gnu.toolchain.cmake`的工具链定义文件位于项目的根目录下的`toolchains`文件夹内。此文件应包含有关如何调用正确版本的GCC或其他所需编译器的具体指示。 #### 编译过程 启动多线程编译流程以加速整个过程,通常建议使用机器支持的最大核心数减去一作为并发作业的数量。完成后执行安装命令将生成的目标库复制到适当的位置以便后续链接或分发。 ```bash make -j$(($(nproc) - 1)) sudo make install ``` 对于不同的处理器体系结构,比如MIPS,则需要调整相应的编译器路径和其他相关设置,例如操作系统名称、处理单元型号以及具体的编译器二进制文件地址等信息[^2]。 #### 特殊情况处理 如果遇到依赖项问题或者其他特殊情况,可能还需要额外修改某些脚本或者配置文件中的预设值,像上面提到的例子那样针对Protobuf这样的第三方组件做特殊处理[^3]。 总之,在任何情况下都应当仔细阅读所选平台文档和技术资料,确保所有步骤均按照最佳实践来进行操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值