我并不是真正的 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 版本无关的内容。有人能帮我完成交叉编译吗?
答案1
完全最新的 Ubuntu 22.04 安装应该已经安装了 glibc 2.35[1],而你的 BeagleBone 有 glibc 2.31。glibc 不向前兼容,这意味着您为 glibc 2.35 构建的程序不能保证在早期版本的 glibc 上运行。
解决方案是,如果可能的话,将主板上的软件更新为较新的版本(带有 glibc 2.35+ 的版本),或者使用旧版本的 glibc 进行编译——在我看来,最简单的方法是安装Ubuntu 20.04,它使用 glibc 2.31。
libgcc 应该是向前兼容的,所以 GCC 版本无关紧要。