如何修复目标机器和构建机器之间的 GLIBC 版本不匹配?

How to fix GLIBC version mismatch between target and build machine?

我正在为嵌入式设备 (Moxa UC-8100) 交叉编译应用程序,并且 运行遇到 GLIBC 的版本问题。

我安装了 Debian 9(按照嵌入式设备供应商的指示)并使用 arm-linux-gnueabihf 工具链。 运行在设备上安装我的构建时,它显示

moxa@Moxa:~$ ./fabs-uc8100 -h
./fabs-uc8100: /lib/arm-linux-gnueabihf/libc.so.6: version `GLIBC_2.17' not found (required by ./fabs-uc8100)
./fabs-uc8100: /lib/arm-linux-gnueabihf/libc.so.6: version `GLIBC_2.16' not found (required by ./fabs-uc8100)

当我 运行 ldd --version, 在设备上,我可以看到它有版本 2.13:

moxa@Moxa:~$ ldd --version
ldd (Debian EGLIBC 2.13-38+deb7u8) 2.13

所以,问题很明显(我的程序是用 2.16 构建的,但我有 2.13 可用),但我该如何解决这个问题?

更新 我在 Debian 9 64 位虚拟机上使用 standard Debian packages, including some Moxa packages 安装了交叉编译工具链:

deb http://debian.moxa.com/debian stretch main contrib non-free 添加到 /etc/apt/sources.list.d/moxa.sources.list,然后:

user@Linux:~$ apt-get install moxa-archive-keyring
user@Linux:~$ dpkg --add-architecture armhf
user@Linux:~$ apt-get install crossbuild-essential-armhf
user@Linux:~$ apt-get install libssl-dev:armhf

how do I fix this?

您需要在构建主机上安装 EGLIBC-2.13 并配置您的交叉编译器以使用它(显然它当前使用的是 GLIBC-2.17 或更高版本)。

由于您没有提供有关交叉编译器来源或构建设置的详细信息,因此您不能指望有人能够准确地告诉您当前设置有什么问题。

据此thread found on a Linaro mailing-list, you may have a chance with gcc-linaro-arm-linux-gnueabi-2012.03-20120326_linux.tar.bz2 available here:

wget http://releases.linaro.org/archive/12.03/components/toolchain/binaries/gcc-linaro-arm-linux-gnueabi-2012.03-20120326_linux.tar.bz2
tar jxf gcc-linaro-arm-linux-gnueabi-2012.03-20120326_linux.tar.bz2

gcc-linaro-arm-linux-gnueabi-2012.03-20120326_linux/bin/arm-linux-gnueabi-gcc --version
arm-linux-gnueabi-gcc (crosstool-NG linaro-1.13.1-2012.03-20120326 - Linaro GCC 2012.03) 4.6.3
Copyright (C) 2011 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

strings gcc-linaro-arm-linux-gnueabi-2012.03-20120326_linux/arm-linux-gnueabi/libc/lib/arm-linux-gnueabi/libc.so.6 | grep 2.13
GLIBC_2.13
GNU C Library (Ubuntu EGLIBC 2.13-20ubuntu5) stable release version 2.13, by Roland McGrath et al.
2.13
NPTL 2.13
glibc 2.13
libc-2.13.so

如果您使用的是 Linux x86_64 系统,您可能需要添加执行 x86 二进制文件所需的包,以防它们尚未安装 - 我正在使用 Ubuntu 20.04.3 LTS.