Ubuntu22.04 交叉编译GCC13.2.0 for Rv1126

一、安装Ubuntu22.04 (此版本运行在Ubuntu22.04下

sudo apt install vim net-tools openssh-server

二、安装必要项

sudo apt update
sudo apt upgrade
sudo apt install build-essential gawk git texinfo bison flex

三、下载必备软件包

1.glibc

https://ftp.gnu.org/gnu/glibc/glibc-2.38.tar.gz

 2.gcc

https://ftp.gnu.org/gnu/gcc/gcc-13.2.0/gcc-13.2.0.tar.gz

3.binutils

 https://ftp.gnu.org/gnu/binutils/binutils-2.41.tar.xz

4.Linux kernel

https://mirrors.edge.kernel.org/pub/linux/kernel/v6.x/linux-6.6.tar.gz

下载完成后存在在/opt目录下

四、在/opt目录下创建编译文件夹,且解压文件

mkdir build-gcc
mkdir build-glibc
mkdir build-utils
mkdir packet #gcc 打包目录

 

五、下载gcc依赖包

cd /opt/gcc-13.2.0/
./contrib/download_prerequisites

这里主要下载的是gmp、mpfr、mpc、isl等库

六、安装内核头文件

cd /opt/linux-6.6
make ARCH=arm INSTALL_HDR_PATH=/opt/packet/arm-linux-gnueabihf headers_install

rv1126 是32位的板子,故ARCH=arm,如需要64位的板子则:

make ARCH=arm64 INSTALL_HDR_PATH=/opt/packet/arm-linux-gnueabihf headers_install

七、编译binutils

cd /opt/build-utils
../binutils-2.41/configure --prefix=/opt/packet --target=arm-linux-gnueabihf --with-arch=armv7l --with-fpu=vfp --with-float=hard --disable-multilib
make
make install

rv1126的板子是armv7l, 故 --with-arch=armv7l

八、部分编译gcc

cd /opt/build-gcc
#../gcc-13.2.0/configure --prefix=/opt/packet --target=arm-linux-gnueabihf --enable-languages=c,c++,fortran  --with-fpu=vfp --with-float=hard --disable-multilib../gcc-13.2.0/configure --prefix=/opt/packet --target=arm-linux-gnueabihf --enable-languages=c,c++ --with-fpu=vfp --with-float=hard --disable-multilib --enable-libstdcxx  --enable-libgm2 --enable-libssp  --enable-sharedmake -j8 all-gcc
make install-gcc

九、部分编译glibc

cd /opt/build-glibcexport PATH=$PATH:/opt/packet/bin../glibc-2.38/configure \--prefix=/opt/packet/arm-linux-gnueabihf \--build=$MACHTYPE \--host=arm-linux-gnueabihf \--target=arm-linux-gnueabihf \--with-arch=armv7l \--with-fpu=vfp \--with-float=hard \--with-headers=/opt/packet/arm-linux-gnueabihf/include \--disable-multilib \libc_cv_forced_unwind=yesmake install-bootstrap-headers=yes install-headers make -j8 csu/subdir_libinstall csu/crt1.o csu/crti.o csu/crtn.o /opt/packet/arm-linux-gnueabihf/libarm-linux-gnueabihf-gcc -nostdlib -nostartfiles -shared -x c /dev/null -o /opt/packet/arm-linux-gnueabihf/lib/libc.sotouch /opt/packet/arm-linux-gnueabihf/include/gnu/stubs.h

 

十、接着部分编译gcc

cd /opt/build-gcc
make -j8 all-target-libgcc
make install-target-libgcc

十一、全编译glibc 

cd /opt/build-glibcexport PATH=$PATH:/opt/packet/binmake -j8make install

十二、全编译gcc

cd /opt/build-gcc
make -j8 all-target-libgcc
make install-target-libgcc#编译libstdc++.so.6
make -j8 all-target-libstdc++-v3
make install-target-libstdc++-v3

查看文件

十三、测试

1.创建build.sh

#!/bin/bash/opt/packet/bin/arm-linux-gnueabihf-gcc --static test.c -o ./test

 2.创建test.c

#include <stdio.h>int main(int argc, const char *argv[])
{printf("Hello World\n");return 0;
}

3.执行

sudo chmod 777 ./build.sh
./build.sh

4.将test这个执行程序拷贝到arm板

十四、测试c++demo

1.build.sh

#!/bin/bash/opt/packet/bin/arm-linux-gnueabihf-g++ --static test.cpp -o ./test -lpthread

2.test.cpp

#include <stdio.h>
#include <thread>
#include <mutex>
#include <unistd.h>
#include <vector>
#include <algorithm>
using namespace std;std::mutex g_mutex;
std::vector<int>g_vData;void process()
{int n = 0;while(true){g_mutex.lock();g_vData.push_back(n++);g_mutex.unlock();}
}void Process1()
{while(true){g_mutex.lock();if(g_vData.size() > 0){std::vector<int>::iterator iter = g_vData.begin();printf("%d\n", *iter);g_vData.erase(iter);}g_mutex.unlock();}
}int main()
{printf("hello\n");std::thread* pthread = new std::thread(process);std::thread* pthread1 = new std::thread(Process1);sleep(-1);return 0;
}

3.执行

sudo chmod 777 ./build.sh
./build.sh

4.拷贝到rv1126板子运行

十五、参考链接

aarch64-linux-gnu_交叉编译工具链_gcc-9.3.0-x86_64_arrch64-linux-gnu-CSDN博客

创建飞腾CPU的交叉编译环境_飞腾内核编译-CSDN博客

交叉编译生成可以在ARM64平台上运行的gcc_gdb arm64交叉编译-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/205925.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

上海泗博MODBUS转PROFINET网关TS-180 网关连接LED显示屏应用案例

项目 常州某钢铁公司的轧钢车间为了更清晰地显示当天轧钢系统各环节的工作参数&#xff0c;如轧钢的日期、钢种、吐丝机设备运行情况等&#xff0c;引进了另一家为其定制的LED显示屏。轧钢系统各环节的设备参数通过西门子S7-1500PLC采集后&#xff0c;实时显示在LED显示屏上&am…

vue2使用el-tag自定义菜单导航标签

需求&#xff1a;使用el-tag写个菜单导航栏&#xff0c;点击路由的时候就添加 功能&#xff1a; 设置鼠标横向滚动并且不展示滚动条添加关闭其他、关闭左侧、关闭右侧、全部关闭标签功能单个标签删除功能添加&#xff0c;固定标签不可删除右键点击展开操作菜单栏设置个默认固定…

代码随想录算法训练营第四十三天【动态规划part05】 | 1049. 最后一块石头的重量 II、494. 目标和、474.一和零

1049. 最后一块石头的重量 II 题目链接&#xff1a; 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 求解思路&#xff1a; 等于把石头尽量分成重量相同的两堆 动规五部曲 确定dp数组及其下标含义&#xff1a;容量为j的背包&#xff0c;最多能装…

kubeadm join 192.168.10.16:6443 --token xxx报错Failed to request cluster-info

1、node节点执行 kubeadm join 192.168.10.16:6443 --token hak4zi.hrib9uv4p62t1uok --discovery-token-ca-cert-hash sha256:4337638eef783ee6a66045ad699722079e071c2dfbaa21e37d3174f04d58ea97 --v2 报错 [discovery] Failed to request cluster-info, will try again: G…

数据结构与算法编程题8

试编写算法将带头结点的单链表就地逆置&#xff0c;所谓“就地”是指空间复杂度为 O(1)。 #include <iostream> using namespace std;typedef int Elemtype; #define ERROR 0; #define OK 1;typedef struct LNode {Elemtype data; //结点保存的数据struct LNode…

技术分享| anyRTC之RTN网络

RTN(Real-time Network)中文名&#xff1a;实时音视频传输网络。 RTN是最近几年由各大RTC的云厂商提出的一个全新架构的音视频实时传输网络概念。类似于直播的CDN网络&#xff0c;RTN是对音视频的实时性又强烈要求的场景而设计的&#xff0c;原理上全球端到端的时延通过RTN网络…

微服务开发中,使用AOP和自定义注解实现对权限的校验

一、背景 微服务开发中&#xff0c;暴露在外网的接口&#xff0c;为了访问的安全&#xff0c;都是需要在http请求中传入登录时颁发的token。这时候&#xff0c;我们需要有专门用来做校验token并解析用户信息的服务。如下图所示&#xff0c;http请求先经过api网关&#xff0c;网…

云原生正在重塑软件的整个生命周期(内附资料)

随着企业数字化转型进程的发展&#xff0c;企业面临着新旧商业形态的剧变&#xff0c;颠覆和重构时刻都在发生。 企业需要更加快速地感知用户侧的需求变化并做出调整&#xff0c;才有可能在竞争中持续积累优势。业务的个性化、敏捷化、智能化需求日益突显&#xff0c;数字化应…

【Python】Vscode解决Python中制表符和空格混用导致的缩进问题

【Python】Vscode解决Python中制表符和空格混用导致的缩进问题 文章目录 【Python】Vscode解决Python中制表符和空格混用导致的缩进问题1. 问题来源2. 解决Reference 1. 问题来源 在python中使用缩进来进行代码块的分区&#xff0c;通常来说python的一个缩进包含4个空格&#…

[Linux] shell条件语句和if语句

一、条件语句 1.1 测试 test 测试文件的表达式是否成立 格式&#xff1a;test 条件表达式 [ 条件表达式 ] 选项作用-d测试是否为目录-e测试目录或文件是否存在-a测试目录或文件是否存在-f测试是否为文件-r测试当前用户是否有权限读取-w测试当前用户是否有权限写入-x测试当前…

UE4基础篇十五:AI行为树

一、学习完教程后需要掌握知识点 1.1、基础概念: 1.1 行为树:控制并显示AI的决策制定过程 1.2 黑板:可以看做是行为树的创建一些公有变量,外部可以修改行为树黑板的变量值,达到修改行为树状态的逻辑 1.3 环境查询: 获取地图环境中的信息进行一个筛选,查找到所需要的的…

ZLMediaKit安装配置和推拉流

一、ZLMediaKit 库简介 ZLMediaKit 是一个基于 C11 的高性能运营级流媒体服务框架 官方写的项目特点&#xff1a; 基于 C11 开发&#xff0c;避免使用裸指针&#xff0c;代码稳定可靠&#xff0c;性能优越。 支持多种协议(RTSP/RTMP/HLS/HTTP-FLV/Websocket-FLV/GB28181/MP…