如何修复目标机器和构建机器之间的 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.
我正在为嵌入式设备 (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.