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路径,删除其下所有/相关文件夹,以免失败。

相关推荐
感哥5 小时前
C++ STL 常用算法
c++
用户31187945592185 小时前
Kylin Linux 10 安装 glib2-devel-2.62.5-7.ky10.x86_64.rpm 方法(附安装包)
linux
涛啊涛6 小时前
Centos7非LVM根分区容量不足后扩容,对调硬盘挂载/
linux·磁盘管理
saltymilk16 小时前
C++ 模板参数推导问题小记(模板类的模板构造函数)
c++·模板元编程
感哥16 小时前
C++ lambda 匿名函数
c++
沐怡旸1 天前
【底层机制】std::unique_ptr 解决的痛点?是什么?如何实现?怎么正确使用?
c++·面试
感哥1 天前
C++ 内存管理
c++
CYRUS_STUDIO1 天前
用 Frida 控制 Android 线程:kill 命令、挂起与恢复全解析
android·linux·逆向
熊猫李1 天前
rootfs-根文件系统详解
linux
博笙困了1 天前
AcWing学习——双指针算法
c++·算法