WSL Ubuntu:如何设置 gcc 为特定 glibc 版本的 arm 进行交叉编译?

问题描述 投票:0回答:1

我并不是真正的linux专家,所以我感觉有点失落。

我正在 WSL 中运行 Ubuntu 22.04.3 LTS 映像,因为我需要使用 Windows PC 为 ARM Linux PC(BeagleBone Black,现在称为“BBB”)交叉编译程序。该图像是由 Powershell 命令自动安装的

WSL.exe --install
,我对此很满意。

我已经能够添加armhf架构、gcc-arm-linux-gnueabihf并构建我的程序,但我从BBB收到了glibc版本错误。

所以我尝试安装与 BBB 相同的 GCC 版本,即 10,但没有成功。尝试了 9,结果相同。


这就是我在 WSL UBUNTU 上安装所有内容的方式(省略所有更新/升级):

    sudo bash -c "echo 'deb [arch=armhf] http://ports.ubuntu.com/ubuntu-ports       jammy main restricted universe multiverse'            >  /etc/apt/sources.list.d/armhf.list"
    sudo bash -c "echo 'deb [arch=armhf] http://ports.ubuntu.com/ubuntu-ports       jammy-updates main restricted universe multiverse'    >> /etc/apt/sources.list.d/armhf.list"
    sudo bash -c "echo 'deb [arch=armhf] http://ports.ubuntu.com/ubuntu-ports       jammy-security main restricted universe multiverse'   >> /etc/apt/sources.list.d/armhf.list"
    sudo bash -c "echo 'deb [arch=armhf] http://ports.ubuntu.com/ubuntu-ports       jammy-backports main restricted universe multiverse'  >> /etc/apt/sources.list.d/armhf.list"
    sudo dpkg --add-architecture armhf
    sudo apt install build-essential checkinstall -y
    sudo apt install  gcc-9-arm-linux-gnueabihf g++-9-arm-linux-gnueabihf -y
    sudo update-alternatives --install \
                          /usr/bin/arm-linux-gnueabihf-gcc          arm-gcc          /usr/bin/arm-linux-gnueabihf-gcc-9 \
                100 \
                --slave   /usr/bin/arm-linux-gnueabihf-cc           arm-cc           /usr/bin/arm-linux-gnueabihf-gcc-9 \
                --slave   /usr/bin/arm-linux-gnueabihf-c++          arm-c++          /usr/bin/arm-linux-gnueabihf-g++-9 \
                --slave   /usr/bin/arm-linux-gnueabihf-cpp          arm-cpp          /usr/bin/arm-linux-gnueabihf-cpp-9 \
                --slave   /usr/bin/arm-linux-gnueabihf-g++          arm-g++          /usr/bin/arm-linux-gnueabihf-g++-9 \
                --slave   /usr/bin/arm-linux-gnueabihf-gcov         arm-gcov         /usr/bin/arm-linux-gnueabihf-gcov-9 \
                --slave   /usr/bin/arm-linux-gnueabihf-gcov-dump    arm-gcov-dump    /usr/bin/arm-linux-gnueabihf-gcov-dump-9 \
                --slave   /usr/bin/arm-linux-gnueabihf-gcov-tool    arm-gcov-tool    /usr/bin/arm-linux-gnueabihf-gcov-tool-9 \
                --slave   /usr/bin/arm-linux-gnueabihf-lto-dump     arm-lto-dump     /usr/bin/arm-linux-gnueabihf-lto-dump-9 \
                --slave   /usr/bin/arm-linux-gnueabihf-gcc-ar       arm-gcc-ar       /usr/bin/arm-linux-gnueabihf-gcc-ar-9 \
                --slave   /usr/bin/arm-linux-gnueabihf-gcc-nm       arm-gcc-nm       /usr/bin/arm-linux-gnueabihf-gcc-nm-9 \
                --slave   /usr/bin/arm-linux-gnueabihf-gcc-ranlib   arm-gcc-ranlib   /usr/bin/arm-linux-gnueabihf-gcc-ranlib-9
    sudo apt install libgtk-3-dev:armhf -y

现在,我不再构建需要太多时间的项目,而是在 UBUNTU 和 BBB 上的这个问题的接受答案中构建了示例代码。

基于 BBB 输出构建的:

GNU libc version: 2.31

PC上的版本总是输出此错误:

./glibc-version-ARM: /lib/arm-linux-gnueabihf/libc.so.6: version `GLIBC_2.34' not found (required by ./glibc-version-ARM)

所以,我显然错过了一些与 GCC 版本无关的东西。有人可以帮助我进行交叉编译吗?

linux ubuntu arm
1个回答
0
投票

完全更新的 Ubuntu 22.04 安装应安装 glibc 2.35 [1],而您的 BeagleBone 则安装 glibc 2.31。 glibc 不向前兼容,这意味着您为 glibc 2.35 构建的程序不能保证在早期版本的 glibc 上运行。

解决方案是,如果可能的话,将主板上的系统更新到较新的版本(glibc 2.35+ 附带的版本),或者使用旧版本的 glibc 进行编译——IMO 最简单的方法是安装 Ubuntu 20.04,使用 glibc 2.31。

libgcc 应该是向前兼容的,所以 GCC 版本应该不重要。

© www.soinside.com 2019 - 2024. All rights reserved.