在 32 位 Linux 系统上,调用这个
$ /lib/libc.so.6
Run Code Online (Sandbox Code Playgroud)
而在 64 位系统上,这
$ /lib/x86_64-linux-gnu/libc.so.6
Run Code Online (Sandbox Code Playgroud)
在 shell 中,提供如下输出:
GNU C Library stable release version 2.10.1, by Roland McGrath et al.
Copyright (C) 2009 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.
Compiled by GNU CC version 4.4.0 20090506 (Red Hat 4.4.0-4).
Compiled on a Linux >>2.6.18-128.4.1.el5<< system on 2009-08-19.
Available extensions:
The C …
Run Code Online (Sandbox Code Playgroud) 我想在我的 CentOS 6.5 机器上安装 Android NDK。但是当我运行程序时,它说它需要 glibc 2.14 才能运行。我的 CentOS 6.5 只安装了 Glibc 2.12。所以我尝试通过以下方式更新 glibc:
$ sudo yum update glibc
Run Code Online (Sandbox Code Playgroud)
但是之后我发现glibc版本仍然是2.12,而不是2.14。
$ ldd --version
ldd (GNU libc) 2.12
Run Code Online (Sandbox Code Playgroud)
我认为 glibc 2.14 在 CentOS 存储库上可能不可用。那么如何在 CentOS 6.5 上将其更新为 glibc 2.14?
我有一台带有 glibc i686 和 x86_64 的机器,还有一个非常烦人的 glibc 问题。
在一台计算机上安装两个同名的库是否正常?我怎么知道执行的是哪个库?
直到最近,我才相信 x86_64 是 i686。好吧,我一定是弄错了,但为什么呢?
[root@machin ~]# yum info glibc
Loaded plugins: rhnplugin, security
This system is not registered with RHN.
RHN support will be disabled.
Excluding Packages in global exclude list
Finished
Installed Packages
Name : glibc
Arch : i686
Version : 2.5
Release : 42
Size : 12 M
Repo : installed
Summary : The GNU libc libraries.
License : LGPL
Description: The glibc package contains standard libraries which are …
Run Code Online (Sandbox Code Playgroud) 如果我们使用,echo 1234 >> some-file
则文档说明输出已附加。
我的猜测是,如果 some-file 不存在,那么 O_CREAT 将创建一个新文件。如果>
使用,则 O_TRUNC 将截断现有文件。
的情况下 >>
:文件是否会被打开为 O_WRONLY(或 O_RDWR)并寻求结束并完成写入操作,模拟 O_APPEND?还是将文件作为 O_APPEND 打开,将其留给内核以确保发生附加?
我问这个是因为当输出文件来自 NFS 挂载点时,保存进程正在覆盖由 echo 插入的一些标记,并且 NFS 文档说服务器不支持 O_APPEND,因此客户端内核将不得不处理它。我猜保护进程正在使用 O_APPEND ,但不确定 bash>>
在 linux 上,因此在这里提出问题。
我正在使用 Arch Linux,并且我已经按照wiki 上关于设置我的语言环境的说明进行操作。
几乎每个运行的程序都会抱怨语言环境——甚至locale
. 它看起来像这样:
% locale
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=
LC_CTYPE=en_US.UTF-8
LC_NUMERIC=en-US
LC_TIME=en-US
LC_COLLATE="POSIX"
LC_MONETARY=en-US
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT=en-US
LC_IDENTIFICATION="POSIX"
LC_ALL=
Run Code Online (Sandbox Code Playgroud)
或者:
% perl
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LC_TIME = "en-US",
LC_NUMERIC = "en-US",
LC_MONETARY = "en-US",
LC_MEASUREMENT = "en-US",
LC_CTYPE = "en_US.UTF-8",
LANG = (unset)
are supported …
Run Code Online (Sandbox Code Playgroud) 如何处理libcrypt.so.1
Arch Linux 上的缺失问题?
尝试运行openoffice4
(LibreOffice二进制文件)会导致:
/opt/openoffice4/program/javaldx: error while loading shared libraries: libcrypt.so.1: cannot open shared object file: No such file or directory\n/opt/openoffice4/program/soffice.bin: error while loading shared libraries: libcrypt.so.1: cannot open shared object file: No such file or directory\n
Run Code Online (Sandbox Code Playgroud)\n该文件libcrypt.so.1
确实不存在。然而,有:
\xe2\x94\x94[/usr/lib]> ls -al libcrypt*\nlrwxrwxrwx 1 root root 16 Dec 18 11:31 libcrypto.so -> libcrypto.so.1.1\n-rwxr-xr-x 1 root root 2999144 Dec 18 11:31 libcrypto.so.1.1\nlrwxrwxrwx 1 root root 23 Feb 3 12:16 libcryptsetup.so …
Run Code Online (Sandbox Code Playgroud) 我管理一个 Gentoo Hardened box,它使用文件功能来消除对 setuid-root 二进制文件的大部分需求(例如,/bin/ping
有 CAP_NET_RAW 等)。
事实上,我剩下的唯一二进制文件就是这个:
abraxas ~ # find / -xdev -type f -perm -u=s
/usr/lib64/misc/glibc/pt_chown
abraxas ~ #
Run Code Online (Sandbox Code Playgroud)
如果我删除了 setuid 位,或者重新挂载我的根文件系统nosuid
,sshd 和 GNU Screen 将停止工作,因为它们调用grantpt(3)
了它们的主伪终端,而 glibc 显然会执行这个程序来 chown 和 chmod 下的从伪终端/dev/pts/
,而 GNU Screen 关心这个函数的时间失败。
问题是,手册页grantpt(3)
明确指出,在 Linux 下,devpts
挂载文件系统后,不需要此类帮助程序二进制文件;内核会自动将slave的UID & GID设置为打开的进程的真实UID & GID /dev/ptmx
(通过调用getpt(3)
)。
我编写了一个小示例程序来演示这一点:
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
int main(void)
{
int master; …
Run Code Online (Sandbox Code Playgroud) 当我尝试自己实现C字符串库时,发现glibc和Linux内核在实现某些功能的方式上有所不同。例如,glibc memchr和glibc strchr使用一些技巧来加速函数,但内核 memchr和内核 strchr没有。为什么 Linux 内核函数没有像 glibc 那样优化?
我试图让量角器工作以执行 e2e 角度测试,但量角器需要Selenium,而后者需要ChromeDriver,后者需要glibc
2.14。我目前的开发箱运行的是glibc
2.13附带的 Debian Wheezy 。我已经读到切换到 Debian 的不稳定分支将提供对 的访问glib-2.14
,但据我所知,不稳定非常......不稳定。
有什么方法可以升级glibc
到 2.14 或 2.15 而不会破坏一切?或者如果事情开始破裂,是否可以从不稳定的 Debian 分支切换回来?
12:15:22.784 INFO - Executing: [new session: {browserName=chrome}] at URL: /session)
12:15:22.796 INFO - Creating a new session for Capabilities [{browserName=chrome}]
/home/chris/projects/personal/woddy/client/selenium/chromedriver: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.15' not found (required by /home/chris/projects/personal/woddy/client/selenium/chromedriver)
/home/chris/projects/personal/woddy/client/selenium/chromedriver: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.14' not found (required by /home/chris/projects/personal/woddy/client/selenium/chromedriver)
12:15:43.032 WARN - Exception thrown
java.util.concurrent.ExecutionException: org.openqa.selenium.WebDriverException: java.lang.reflect.InvocationTargetException
Run Code Online (Sandbox Code Playgroud) 显然可以编译 glibc--enable-kernel
以支持旧的内核版本。但是,我无法找到有关特定 glibc 版本支持哪些内核版本的信息。理想情况下,我希望看到每个 glibc (2.x) 和内核 (2.6.x) 版本的兼容性矩阵。它存在吗?
如果它不存在,也许是因为每个 glibc 版本(在过去 5 年左右)都支持自 2.6.0 以来的所有内核?
(Arch = x86-64,如果这很重要)