c - 将 Linux 内核升级到最新的 64 位是否会更改 glibc?

标签 c linux linux-kernel

在 Linode,我们一直在进行升级以利用他们的新 SSD 驱动器。我们在较旧的 Ubuntu 10.10 32 位系统上运行。

为了进行新的升级,我们已将内核从 32 位更改为“最新的 64 位”。到目前为止,这一直运行良好(我们正在运行的 32 位软件很高兴在 64 位内核中运行),但我想知道这是否会改变 glibc。我唯一可能担心的 Linode 是一个 Linode,我们使用 C 编译器构建软件,而且我不一定想更改用于构建的 glibc 版本。

是的,我知道我们应该将实际发行版升级到更新的 64 位 Ubuntu,但这是一个更大的项目,我们还没有准备好做。因此,目前我们只想使用最新的 64 位内核运行,因为它似乎不会造成任何损害。我们目前只关心从 C 源代码创建构建对 glibc 的影响。

当然,如果有人知道运行 64 位内核的任何其他缺点,请随时发言!

谢谢

道格

最佳答案

看一下这个例子:

64 位系统:

 alex@rhyme ~/RPM $ ldd /bin/ls  
    linux-vdso.so.1 (0x00007fffef200000)
    libtinfo.so.5 => /lib64/libtinfo.so.5 (0x00007f4b7b9d8000)
    libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f4b7b7b0000)
    libcap.so.2 => /lib64/libcap.so.2 (0x00007f4b7b5a8000)
    libacl.so.1 => /lib64/libacl.so.1 (0x00007f4b7b398000)
    libc.so.6 => /lib64/libc.so.6 (0x00007f4b7afe8000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f4b7bc30000)
    libdl.so.2 => /lib64/libdl.so.2 (0x00007f4b7ade0000)
    libpcre.so.3 => /lib64/libpcre.so.3 (0x00007f4b7ab98000)
    libattr.so.1 => /lib64/libattr.so.1 (0x00007f4b7a990000)
alex@rhyme ~/RPM $  sudo chroot hsh/chroot/ /bin/bash
[sudo] password for alex:
[root@rhyme /]#

但是 chroot 环境(用于构建)是 32 位:

[root@rhyme /]# ldd /bin/ls
    linux-gate.so.1 (0xf7752000)
    libtinfo.so.5 => /lib/libtinfo.so.5 (0xf76f8000)
    libselinux.so.1 => /lib/libselinux.so.1 (0xf76d0000)
    libcap.so.2 => /lib/libcap.so.2 (0xf76c8000)
    libacl.so.1 => /lib/libacl.so.1 (0xf76b8000)
    libc.so.6 => /lib/libc.so.6 (0xf7540000)
    /lib/ld-linux.so.2 (0xf7730000)
    libpcre.so.3 => /lib/libpcre.so.3 (0xf74f8000)
    libdl.so.2 => /lib/libdl.so.2 (0xf74f0000)
    libattr.so.1 => /lib/libattr.so.1 (0xf74e8000)
[root@rhyme /]# 

请注意 ldd 输出的差异。 coreutils(和ls)的版本基本相同。

据我所知,使用 64 位内核可能有一个缺点。在 64 位模式下,内核本身和控制结构需要稍多的内存(内核代码指令是 64 位)。除此之外,我没有发现这种配置有任何问题。

顺便说一句,运行 32 和 64 个二进制文件和库共存于单个系统中的系统称为多架构(在上面的示例中,没有多架构,因为第二个系统有自己的架构) ,我已经chroot到的单独文件系统)。据我所知,Debian 和 Ubuntu 都具有可行的多架构支持,并且 apt 的单个实例可以完美管理 32 位和 64 位软件包集。

因此,理论上您可以进行“缓慢迁移”,只需在 32 位对应库旁边安装 64 位库,并将二进制文件一一替换为 32 位到 64 位。当然,这不是最快的方法;-),但它几乎可以无缝实现,不会出现长时间停机或软件版本或行为发生意外变化的情况。当然,您的里程可能会有所不同,您应该仔细检查您的条件、环境等等。

关于c - 将 Linux 内核升级到最新的 64 位是否会更改 glibc?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23189411/

相关文章:

linux - 使用 bash 对文件进行算术运算

MySQL临时表查询-将计算列添加到select中计算的表中

c - 解析字节 (C Windows)

linux - 命令行全文索引?

linux-kernel - Linux 中 x86 架构的 IPI 种类

通过 USB 的 Android 早期启动控制台

linux - 如何在 Ubuntu 12.04 中通过确认删除文件

C代码解释

c# - 从 c 调用 mono_method(指针)

linux - 通过 ssh 运行 bash 脚本以启动激活器后,Travis-ci 不会退出