【问题标题】:CRC mismatch warning running helloworld.c from gdb on ubuntu 20.04.3在 ubuntu 20.04.3 上从 gdb 运行 helloworld.c 的 CRC 不匹配警告
【发布时间】:2022-01-01 03:32:03
【问题描述】:

我有最琐碎的程序

$ cat helloworld.c
#include <stdio.h>
int main(void){
  printf("Hello World!\n");
  return 0;
}

$ gcc -g helloworld.c -o helloworld

我想在 gdb 下运行

$ gdb -tui ./helloworld

当我在 gdb 中运行时,

warning: the debug information found in "/lib64/ld-2.31.so" does not match "/lib64/ld-linux-x86-64.so.2" (CRC mismatch).

我认为我的系统是最新的。我已经跑了

$ sudo apt-get update
$ sudo apt-get upgrade

我已尝试重新安装任何 libc6* 软件包

$ apt list --installed | grep 'libc6'

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.  
libc6-amd64/focal-updates,now 2.31-0ubuntu9.2 i386 [installed,automatic]  
libc6-dbg/focal-updates,now 2.31-0ubuntu9.2 amd64 [installed,automatic]  
libc6-dev-amd64/focal-updates,now 2.31-0ubuntu9.2 i386 [installed,automatic]  
libc6-dev/focal-updates,now 2.31-0ubuntu9.2 amd64 [installed,automatic]  
libc6-dev/focal-updates,now 2.31-0ubuntu9.2 i386 [installed,automatic]  
libc6/focal-updates,now 2.31-0ubuntu9.2 amd64 [installed,automatic]  
libc6/focal-updates,now 2.31-0ubuntu9.2 i386 [installed,automatic]

接下来,对于这 7 个包中的每一个,相当于

$ sudo apt-get --reinstall install 'libc6-amd64'

但警告与之前相同。

关于 ld-2.31.so,@employeesrussian 在 cmets 中提到

$ ls -lsh /lib64/ld-linux-x86-64.so.2
0 lrwxrwxrwx 1 root root 32 Dec 16  2020 /lib64/ld-linux-x86-64.so.2 -> /lib/x86_64-linux-gnu/ld-2.31.so
$ ls -lsh /lib/x86_64-linux-gnu/ld-2.31.so 
188K -rwxr-xr-x 1 root root 187K Dec 16  2020 /lib/x86_64-linux-gnu/ld-2.31.so

$ ls -lsh /lib64/ld-2.31.so 
180K -rwxr-xr-x 1 root root 178K Dec 16  2020 /lib64/ld-2.31.so

$ dpkg -S /lib64/ld-linux-x86-64.so.2
libc6:amd64: /lib64/ld-linux-x86-64.so.2

$ dpkg -S /lib64/ld-2.31.so
libc6-amd64:i386: /lib64/ld-2.31.so

我已卸载 libc6-dev-amd64,如下面的@employeesrussian 所示

$ sudo apt-get purge libc6-dev-amd64
$ apt list --installed | grep libc6

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

libc6-amd64/focal-updates,now 2.31-0ubuntu9.2 i386 [installed,auto-removable]
libc6-dbg/focal-updates,now 2.31-0ubuntu9.2 amd64 [installed,automatic]
libc6-dev/focal-updates,now 2.31-0ubuntu9.2 amd64 [installed,automatic]
libc6-dev/focal-updates,now 2.31-0ubuntu9.2 i386 [installed,auto-removable]
libc6/focal-updates,now 2.31-0ubuntu9.2 amd64 [installed,automatic]
libc6/focal-updates,now 2.31-0ubuntu9.2 i386 [installed,automatic]

但在 gdb 中报告的完全相同的错误仍然存​​在

/lib64/ld-2.31.so 仍然存在

$ cd /lib64
$ ls -l ld-2.31.so
-rwxr-xr-x 1 root root 182168 Dec 16  2020 ld-2.31.so

libc6-amd64:i386 仍在安装

$ dpkg -l | grep libc6-amd64
ii  libc6-amd64:i386  2.31-0ubuntu9.2  i386  GNU C Library: 64bit Shared libraries for AMD64

$ apt list --installed | grep libc6-amd64
WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
libc6-amd64/focal-updates,now 2.31-0ubuntu9.2 i386 [installed,auto-removable]

尝试删除包失败

$ sudo dpkg --remove libc6-amd64:i386
[sudo] password for rgh: 
dpkg: dependency problems prevent removal of libc6-amd64:i386:
 lib64tinfo6:i386 depends on libc6-amd64 (>= 2.16).
 lib64ncursesw6:i386 depends on libc6-amd64 (>= 2.14).
 lib64ncurses6:i386 depends on libc6-amd64 (>= 2.14).

dpkg: error processing package libc6-amd64:i386 (--remove):
 dependency problems - not removing
Errors were encountered while processing:
 libc6-amd64:i386

我记得不久前安装了一些 ncurses 包。

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 20.04.3 LTS
Release:    20.04
Codename:   focal

【问题讨论】:

  • 这个here可能有答案,答案链接this
  • 您可能安装了一些版本不匹配的软件包(libc6*?尝试重新安装这些)。
  • @EugeneSh。假设我按照你的建议做了,那没有用。我已经相应地更新了问题。
  • ls -l /lib64/ld-linux-x86-64.so.2 /lib64/ld-2.31.so 显示什么? dpkg -S /lib64/ld-linux-x86-64.so.2 /lib64/ld-2.31.so 也一样?普通的 Debian 系统应该没有 /lib64/ld-2.31.so AFAIU。
  • 感谢@employeesrussian 我已更新问题以显示这些命令的输出。

标签: c linux ubuntu gcc gdb


【解决方案1】:

这似乎是根本原因:

$ dpkg -S /lib64/ld-2.31.so
libc6-amd64:i386: /lib64/ld-2.31.so

根据this answerlibc6-amd64:i386是为Ubuntu 32bit准备的64bit交叉编译工具链。由于你是64位系统,所以这个包没用。

卸载它可能会修复您的警告。

更新:

试图理解这一点

apt listdpkg -l 显示包名的格式不同。在我的系统上:

dpkg-query -l libc6* | grep '^ii'

ii  libc6:amd64           2.32-4       amd64        GNU C Library: Shared libraries
ii  libc6:i386            2.32-4       i386         GNU C Library: Shared libraries
ii  libc6-dbg:amd64       2.32-4       amd64        GNU C Library: detached debugging symbols
ii  libc6-dev:amd64       2.32-4       amd64        GNU C Library: Development Libraries and Header Files
ii  libc6-dev-i386        2.32-4       amd64        GNU C Library: 32-bit development libraries for AMD64
ii  libc6-dev-x32         2.32-4       amd64        GNU C Library: X32 ABI Development Libraries for AMD64
ii  libc6-i386            2.32-4       amd64        GNU C Library: 32-bit shared libraries for AMD64
ii  libc6-x32             2.32-4       amd64        GNU C Library: X32 ABI Shared libraries for AMD64

对比:

apt list --installed libc6*

libc6-dbg/...,now 2.32-4 amd64 [installed,automatic]
libc6-dev-i386/...,now 2.32-4 amd64 [installed,automatic]
libc6-dev-x32/...,now 2.32-4 amd64 [installed,automatic]
libc6-dev/...,now 2.32-4 amd64 [installed,automatic]
libc6-i386/...,now 2.32-4 amd64 [installed,automatic]
libc6-x32/...,now 2.32-4 amd64 [installed,automatic]
libc6/...,now 2.32-4 amd64 [installed]
libc6/...,now 2.32-4 i386 [installed,automatic]

我相信您要删除的包是这个:

libc6-dev-amd64/focal-updates,now 2.31-0ubuntu9.2 i386 [installed,automatic]  

【讨论】:

  • 试图理解这一点。 $ apt list --已安装 | grep 'libc6' 列出了我已经安装的软件包,就像我的问题一样。 'libc6-amd64:i386:' 不在其中。然而 $ dpkg -S /lib64/ld-2.31.so 说 /lib64/ld-2.31.so 在那个包里。如何卸载未安装的软件包?
  • @rgh 我已经更新了答案。
  • 我已经通过 $ sudo apt-get purge libc6-dev-amd64 删除了 libc6-dev-amd64 但错误仍然存​​在。
  • @rgh 问题文件 -- /lib64/ld-2.31.so 仍然存在吗? dpkg -l 是否显示 libc6-amd64:i386 仍然安装?如果你sudo dpkg --remove libc6-amd64:i386 会发生什么?
  • @rgh 是的,你还需要删除依赖于 libc6-amd64:i386 的其他无用包
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-14
  • 2022-11-09
  • 1970-01-01
  • 2021-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多