自从尝试升级到 16.04 xenial 以来,我得到了
$ apt
apt: relocation error: /usr/lib/x86_64-linux-gnu/libapt-pkg.so.5.0:
symbol _ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE7compareERKS4_,
version GLIBCXX_3.4.21 not defined in file libstdc++.so.6 with link time reference
Run Code Online (Sandbox Code Playgroud)
简单地运行时apt
。不用说,这使得做任何事情都变得困难。
任何提示?
每当我尝试从终端运行程序(例如 apt-get)时,我都会得到:
apt-get: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.14' not found (required by /usr/lib/libstdc++.so.6)
Run Code Online (Sandbox Code Playgroud)
不仅仅是 apt-get,还有 gimp-2.8、vlc 和其他程序。除了像 ls 这样的一些简单程序外,我总是会收到以前的消息。
更不用说,我可以运行 gimp 或 vlc,或通过软件中心或 gdebi 通过任何 gui 系统安装任何程序,无论是 unity 的菜单,还是 nautilus 的 open with。但是当涉及到通过终端运行这些程序时,它永远不起作用,而且我总是收到以前的错误消息。
我经常弄乱我的系统,所以我可能弄坏了一些东西。另外我想我去修改了 /etc/sudoers 文件,我的电脑一直在休眠,这有什么影响吗?
我是处理 linux 的新手,所以我不知道是什么导致了这个问题。
我一直很高兴在我的 Ubuntu 20.04 上安装 5.10 主线内核(来自https://kernel.ubuntu.com/~kernel-ppa/mainline/)。
在尝试更新到 5.10.33 时,我发现该包对 libc >=2.33(焦点位于 2.31)存在不受欢迎的依赖性-headers
(虽然不是图像本身——但谁不想没有头文件)。
AFAIK,libc6 几乎不可能升级。是这个吗?除非我放弃 LTS,否则我会停留在 5.10.32 吗?这些人甚至有一个可以报告错误的面向公众的网站吗?
更新:这似乎是主要的启动板错误。一件好事:tuxinvader提出了一个Docker 容器(来自 Github:focal-mainline-builder)用于构建内核主线映像并将 5.10 - 5.12 包上传到他的 PPA:
提示:要查看您选择的系列/版本范围的所有可用 linux 软件包,在弄乱 PPA 和 Debian 向后移植、xanmod 等(如我所见)之后,请执行以下操作
apt update
printf '%s\0' linux-{image-unsigned,headers,modules}-5.10.{32..40} |
xargs -0 -n 1 apt-cache pkgnames | LC_ALL=C sort | less
Run Code Online (Sandbox Code Playgroud)
希望这个问题会消失。但是让我们面对现实吧,根据“内核主线 PPA”(或它背后的任何人,我仍然不明白如何接触到这些开发人员)的突发奇想,对于二进制文件并不是一种愉快的体验。
我刚刚在这里读到glibc 中存在安全漏洞,并且已经修复。
我发现,实际安装的 glibc 版本可以通过ldd --version
. 我的系统运行版本 2.19。
所以我现在想升级它,但我不知道该怎么做。(我不想升级整个系统)。我试图找出哪个包包含带有apt-cache search glibc
. 但是有数百个包...
那么有人知道如何找出我需要升级以获得新版本 glibc 的软件包吗?
如何修复 E: 内部错误,libc6 没有文件名,这样会显示如果我这样做:
$ sudo apt-get upgrade
or
$ sudo apt-get install package
Run Code Online (Sandbox Code Playgroud)
这是示例:
$ sudo apt-get upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages have been kept back:
ginn hplip hplip-data libdrm-dev libdrm-intel1 libdrm-nouveau1a
libdrm-radeon1 libdrm2 libgrip0 libhpmud0 libkms1 libsane-hpaio
libunity-2d-private0 libunity-core-5.0-5 linux-generic-pae
linux-headers-generic-pae linux-image-generic-pae printer-driver-hpcups
printer-driver-hpijs unity unity-2d-common unity-2d-panel unity-2d-shell
unity-2d-spread unity-common unity-services
The following packages will be upgraded:
alsa-base firefox firefox-globalmenu firefox-gnome-support firefox-locale-en
icedtea-6-jre-cacao icedtea-6-jre-jamvm icedtea-7-jre-jamvm libdbus-glib-1-2
libdbus-glib-1-dev libgnutls-dev …
Run Code Online (Sandbox Code Playgroud) 每当我尝试升级或安装新软件包时,我都会得到以下信息
ibc6-dbg: Depends: libc6 (= 2.31-0ubuntu9.2) but 2.31-0ubuntu9.1 is installed \
libc6-dev: Depends: libc6 (= 2.31-0ubuntu9.2) but 2.31-0ubuntu9.1 is installed \
Depends: libc-dev-bin (= 2.31-0ubuntu9.2) but 2.31-0ubuntu9.2 is installed
libc6-i386: Depends: libc6 (= 2.31-0ubuntu9.2) but 2.31-0ubuntu9.1 is installed
Run Code Online (Sandbox Code Playgroud)
我试过apt --fix-broken install
我试过sudo apt-get -f install
强制安装。
在这两种情况下,我都收到相同的错误消息。
我还是 Linux 的新手,很想学习如何在不擦除操作系统并重新安装的情况下解决这些问题
我64bit
12.10
通过发出命令检查了我的 Ubuntu机器上的 libc 版本ldd --version
。
我看到 Ubuntu 使用eglibc
而不是glibc
. 由于egiblc
是嵌入式设备,是否有为什么Ubuntu使用它,而不是标准的glibc的具体原因。
我在一些 GUI 中使用 Stockfish 国际象棋引擎,但昨天它停止工作了。我没有更改引擎,也没有更改界面,但是当我尝试运行引擎时,它“以代码终止......”,但它没有输出任何代码。唯一可能改变的是我定期升级我的软件包:
sudo apt update && sudo apt dist-upgrade
,我想这一定破坏了它。我安装了最新的 Stockfish 版本并在命令行中运行它,它给出的输出是:
./stockfish_21112912_x64_avx2: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.32' not found (required by ./stockfish_21112912_x64_avx2)
./stockfish_21112912_x64_avx2: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.33' not found (required by ./stockfish_21112912_x64_avx2)
./stockfish_21112912_x64_avx2: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by ./stockfish_21112912_x64_avx2)
Run Code Online (Sandbox Code Playgroud)
所以我想升级 GLIBC,我遇到了这个线程:[https://askubuntu.com/questions/736208/upgrading-glibc]:“Glibc(更广为人知的名称是 GNU C 库)有一个用于 Linux 的分支,称为 libc6 .Libc6 可通过 apt 获得。” 我运行:
apt-cache policy libc6
,它给出了输出:
libc6:
Installed: 2.31-0ubuntu9.2
Candidate: 2.31-0ubuntu9.2
Version table:
*** 2.31-0ubuntu9.2 500
500 http://de.archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages
100 /var/lib/dpkg/status
2.31-0ubuntu9 500
500 http://de.archive.ubuntu.com/ubuntu …
Run Code Online (Sandbox Code Playgroud) 我不明白为什么在 21.10 上构建的二进制文件与 21.04 系统不兼容。
该二进制文件也链接到libc.so.6
21.04 操作系统版本上。
相同的二进制文件,在 21.10 系统上:
$ ldd turboledzd
linux-vdso.so.1 (0x00007ffdc2595000)
libhidapi-hidraw.so.0 => /lib/x86_64-linux-gnu/libhidapi-hidraw.so.0 (0x00007fdd64057000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fdd63e2f000)
libudev.so.1 => /lib/x86_64-linux-gnu/libudev.so.1 (0x00007fdd63e06000)
/lib64/ld-linux-x86-64.so.2 (0x00007fdd64085000)
Run Code Online (Sandbox Code Playgroud)
在21.04系统上:
$ ldd turboledzd
./turboledzd: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by ./turboledzd)
linux-vdso.so.1 (0x00007fff9c570000)
libhidapi-hidraw.so.0 => /lib/x86_64-linux-gnu/libhidapi-hidraw.so.0 (0x00007f37ec402000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f37ec216000)
libudev.so.1 => /lib/x86_64-linux-gnu/libudev.so.1 (0x00007f37ec1ed000)
/lib64/ld-linux-x86-64.so.2 (0x00007f37ec423000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f37ec1cb000)
Run Code Online (Sandbox Code Playgroud)
我的问题:
如果21.04 与21.10libc.so.6
不兼容,那么为什么不调用 21.10 上的 libc ?libc.so.6
libc.so.7
或者,更好的是,为什么它不与称为libglibc.so.2.34
- 如果这是依赖项的东西联系起来?
我想更新到 2022 版本的 glibc,至少 2.35。这似乎在 Ubuntu 22.04 上可用,但如何在 20.04 上获得它?