【备忘】 交叉编译环境搭建

----背景

一个aarch64的设备中有两个SDK,分别需要使用两种不同gcc版本编译,于是在x86上搭一个方便整体切换的交叉编译环境。环境包括:

  • gcc-{$version}
  • g+±{$version}
  • aarch64-linux-gnu-gcc-{$version}
  • aarch64-linux-gnu-g+±{$version}
  • cpp-{$version}

使用update-alternatives工具管理,写一个函数放在.zshrc(或者.bashrc)中,用一条命令整体切换环境。


----步骤

1、安装软件(以gcc-10为例)

sudo apt-get install gcc-10 g++-10 cpp-10 gcc-10-aarch64-linux-gnu-base gcc-10-aarch64-linux-gnu g++-10-aarch64-linux-gnu

2、设置update-alternatives

  1. 设置gcc、g++、aarch64-linux-gnu-gcc-10、aarch64-linux-gnu-g+±10
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 20 \                                                 
--slave /usr/bin/g++ g++ /usr/bin/g++-10 \
--slave /usr/bin/aarch64-linux-gnu-gcc aarch64-linux-gnu-gcc /usr/bin/aarch64-linux-gnu-gcc-10 \
--slave /usr/bin/aarch64-linux-gnu-g++ aarch64-linux-gnu-g++ /usr/bin/aarch64-linux-gnu-g++-10
  1. 设置cpp
sudo update-alternatives --install /usr/bin/cpp cpp /usr/bin/cpp-10 20

3、测试设置是否成功

sudo update-alternatives --config gcc
## 以下为输出:
有 4 个候选项可用于替换 gcc (提供 /usr/bin/gcc)。

  选择       路径           优先级  状态
------------------------------------------------------------
* 0            /usr/bin/gcc-12   80        自动模式
  1            /usr/bin/gcc-10   20        手动模式
  2            /usr/bin/gcc-11   60        手动模式
  3            /usr/bin/gcc-12   80        手动模式
  4            /usr/bin/gcc-9    40        手动模式

要维持当前值[*]请按<回车键>,或者键入选择的编号:1
update-alternatives: 使用 /usr/bin/gcc-10 来在手动模式中提供 /usr/bin/gcc (gcc)
sudo update-alternatives --config cpp
## 以下为输出:
有 5 个候选项可用于替换 cpp (提供 /usr/bin/cpp)。

  选择       路径           优先级  状态
------------------------------------------------------------
* 0            /usr/bin/cpp-12   80        自动模式
  1            /usr/bin/cpp      10        手动模式
  2            /usr/bin/cpp-10   20        手动模式
  3            /usr/bin/cpp-11   60        手动模式
  4            /usr/bin/cpp-12   80        手动模式
  5            /usr/bin/cpp-9    40        手动模式

要维持当前值[*]请按<回车键>,或者键入选择的编号:2
update-alternatives: 使用 /usr/bin/cpp-10 来在手动模式中提供 /usr/bin/cpp (cpp)

4、 写一个函数放在.zshrc

  1. 打开shell的配置文件
# 用zsh的,输入以下命令
sudo nano ~/.zshrc
# 用bash的,输入一下命令
sudo nano ~/.bashrc
  1. 在末尾输入以下脚本函数
# 切换 gcc 和 cpp 版本的函数
switch_gcc_cpp() {
    # 获取 update-alternatives 管理下的所有 gcc 版本
    local options=($(update-alternatives --list gcc))
    
    if [ ${#options[@]} -eq 0 ]; then
        echo "没有找到任何由 update-alternatives 管理的 gcc 版本。"
        return 1
    fi

    # 打印选项列表
    echo "请选择要使用的 gcc 版本:"
    for i in "${options[@]}"; do
        local version=$(basename "$i")
        echo "  ${options[(i)$i]-1}) $version"
    done

    # 用户选择
    echo -n "请输入编号: "
    read choice

    # 检查输入是否为数字以及是否在范围内
    if [[ ! "$choice" =~ ^[0-9]+$ ]] || (( choice < 0 || choice > ${#options[@]} )); then
        echo "无效的选择。"
        return 1
    fi

    local selected_gcc=${options[$choice]}
    #local selected_version=$(basename "$selected_gcc")
    local selected_version=${selected_gcc##*gcc-}
    # echo -n "The selected_gcc is $selected_gcc"
    # echo -n "The selected_version is $selected_version"
    # 切换 gcc 和 cpp
    sudo update-alternatives --set gcc "$selected_gcc"
    sudo update-alternatives --set cpp "/usr/bin/cpp-$selected_version"

    # 如果有对应的交叉编译工具链也一并切换
    # if [ -e "/usr/bin/aarch64-linux-gnu-gcc-$selected_version" ]; then
    #     sudo update-alternatives --set aarch64-linux-gnu-gcc "/usr/bin/aarch64-linux-gnu-gcc-$selected_version"
    #     sudo update-alternatives --set aarch64-linux-gnu-g++ "/usr/bin/aarch64-linux-gnu-g++-$selected_version"
    #     sudo update-alternatives --set aarch64-linux-gnu-cpp "/usr/bin/aarch64-linux-gnu-cpp-$selected_version"
    # fi

    echo "已成功切换到 gcc 和 cpp 版本 $selected_version。"
}
  1. 生效配置
source ~/.zshrc  # or .bashrc, depend on your shell
  1. 测试
(base)  ~/ switch_gcc_cpp
请选择要使用的 gcc 版本:
  1) gcc-10
  2) gcc-11
  3) gcc-12
  4) gcc-9
请输入编号: 1
已成功切换到 gcc 和 cpp 版本 10
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值