我并不是真正的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 版本无关的东西。有人可以帮助我进行交叉编译吗?
完全更新的 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 版本应该不重要。