RK3588上Linux系统编译C/C++ Demo时出现BUG:The C/CXX compiler identification is unknown

BUG的解决思路

BUG描述:

在RK3588板卡上,运行编译rknn_model_zoo-2.3.0中的C/C++ Demo时,出现BUG:

bash 复制代码
-- The C compiler identification is unknown
-- The CXX compiler identification is unknown
CMake Error at CMakeLists.txt:3 (project):
  The CMAKE_C_COMPILER:

    /home/firefly/second/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc

  is not a full path to an existing compiler tool.

  Tell CMake where to find the compiler by setting either the environment
  variable "CC" or the CMake cache entry CMAKE_C_COMPILER to the full path to
  the compiler, or to the compiler name if it is in the PATH.


CMake Error at CMakeLists.txt:3 (project):
  The CMAKE_CXX_COMPILER:

    /home/firefly/second/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++

  is not a full path to an existing compiler tool.

  Tell CMake where to find the compiler by setting either the environment
  variable "CXX" or the CMake cache entry CMAKE_CXX_COMPILER to the full path
  to the compiler, or to the compiler name if it is in the PATH.


-- Configuring incomplete, errors occurred!
See also "/home/firefly/second/rknn_model_zoo-2.3.0/build/build_rknn_resnet_demo_rk3588_linux_aarch64_Release/CMakeFiles/CMakeOutput.log".
See also "/home/firefly/second/rknn_model_zoo-2.3.0/build/build_rknn_resnet_demo_rk3588_linux_aarch64_Release/CMakeFiles/CMakeError.log".

解决方法:

首先最重要的一步:

找到/home/firefly/second/rknn_model_zoo-2.3.0/build路径,删除其下所有文件夹(类似于build_rknn_xxx_demo_rk3588_linux_aarch64_Release的所有文件夹)。

第二步:正确设置gcc和g++的路径

方法一:使用本地系统中安装的 aarch64-linux-gnu-gcc 和 aarch64-linux-gnu-g++
  1. 查看本地系统中安装的 aarch64-linux-gnu-gcc 和 aarch64-linux-gnu-g++ 的路径
bash 复制代码
which aarch64-linux-gnu-gcc
which aarch64-linux-gnu-g++

如果输出/usr/bin/aarch64-linux-gnu-gcc/usr/bin/aarch64-linux-gnu-g++的结果就是本地aarch64-linux-gnu-gcc和aarch64-linux-gnu-g++ 的地址路径。

  1. 设置GCC_COMPILER路径
    在rknn_model_zoo-2.3.0文件根目录中打开终端,进入环境,输入:
bash 复制代码
export GCC_COMPILER=/usr/bin/aarch64-linux-gnu
  1. 编译相应的C/C++ Demo
    我这里编译的是resnet,平台是RK3588,系统架构为aarch64,故在终端输入:
bash 复制代码
./build-linux.sh -t rk3588 -a aarch64 -d resnet
  1. 编译成功
    在rknn_model_zoo-2.3.0文件夹下生成文件/install/rk3588_linux_aarch64/rknn_resnet_demo,其中有可执行文件。
方法二:下载使用官方指定的交叉编译工具
  1. 下载解压交叉编译工具

(如果系统中已经装有交叉编译工具,请忽略此步骤)

不同的系统架构,依赖不同的交叉编译工具。下面给出具体系统架构建议使用的交叉编译工具下载链接:

下载交叉编译工具aarch64-linux-gnu/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu.tar.xz:

bash 复制代码
wget https://releases.linaro.org/components/toolchain/binaries/6.3-2017.05/aarch64-linux-gnu/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu.tar.xz

解压缩下载好的交叉编译工具,记住具体的路径,后面在编译时会用到该路径:

bash 复制代码
tar xvf gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu.tar.xz
  1. 设置GCC_COMPILER路径

在rknn_model_zoo-2.3.0文件根目录中打开终端,进入环境,输入:

bash 复制代码
export GCC_COMPILER=/home/firefly/second/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu
  1. 编译相应的C/C++ Demo
方法三:使用本地系统中安装的gcc和g++

这个方法需要修改build-linux.sh,进入该文件中找到所有CCCXX,并修改为

bash 复制代码
# 第一处
export CC=gcc
export CXX=g++
# 第二处
echo "CC=gcc"
echo "CXX=g++"

保存后编译相应的C/C++ Demo。这个方法在rknn_model_zoo-2.3.0中可能会失败,但在rknn-toolkit2-2.3.0/rknpu2中可以成功的。

注意:方法一、二、三运行前都需要找到/home/firefly/second/rknn_model_zoo-2.3.0/build路径,删除其下所有/相关文件夹,以免失败。

相关推荐
QT 小鲜肉12 小时前
【Linux命令大全】001.文件管理之chattr命令(实操篇)
linux·运维·服务器·笔记
落羽的落羽12 小时前
【C++】哈希扩展——位图和布隆过滤器的介绍与实现
linux·服务器·开发语言·c++·人工智能·算法·机器学习
汪宁宇12 小时前
如何在QT5+MinGW环境中编译使用QGIS开发地图应用
c++·qt·qgis·mingw·地图库
brave and determined12 小时前
传感器学习(day10):MEMS传感器:揭秘智能时代的核心技术
嵌入式硬件·汽车电子·传感器·mems·消费电子·嵌入式设计·传感器应用
fish_xk12 小时前
类和对象(二)
开发语言·c++·算法
JANG102412 小时前
【Linux】进程
linux·网络·chrome
良木生香13 小时前
【数据结构-初阶】详解栈和队列(1)---栈
c语言·数据结构·算法·蓝桥杯
菠萝地亚狂想曲13 小时前
使用C语言操作LUA栈
c语言·junit·lua
MC皮蛋侠客13 小时前
C++编译死机排查工具与实战指南
c++
tang&13 小时前
双指针算法:化繁为简的优雅解法
数据结构·c++·算法