12

我构建了最新的 glibc,现在我在使用 coreutils 之类的函数lscat其他类似vim.

我的错误是

-bash-4.0$ cat
cat: error while loading shared libraries: __vdso_time: invalid mode for dlopen(): Invalid argument

我用以下配置构建了 glibc,没有错误

../glibc/configure --prefix=/home/ex/uid377/glibbuilt

在旧版本(如 2.14)上,运行实用程序会导致分段错误。

-bash-4.0$ ./pwd
./pwd: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by ./pwd)
-bash-4.0$ LD_LIBRARY_PATH=/home/ex/uid377/glibc/lib/:${LD_LIBRARY_PATH}
-bash-4.0$ ./pwd
Segmentation fault (core dumped)

编辑 内核版本

-bash-4.0$ uname -r
2.6.32.26-175.fc12.x86_64
4

1 回答 1

16

如this answer中所述,在单个系统上拥有多个版本的 glibc 是可能的,但有点棘手。特别是,这:

LD_LIBRARY_PATH=/home/ex/uid377/glibc/lib/:${LD_LIBRARY_PATH}

预计崩溃,因为您ld-linux-x86-64.so.2将不匹配您的libc.so.6

cat:加载共享库时出错:__vdso_time:dlopen() 的无效模式:...

目前尚不清楚您是如何构建cat它的,但很可能是完全相同的问题:您正在从 中选择一些库/lib64,而从/home/ex/uid377/glibc/lib. 不要那样做。您必须链接所有将使用的/home/ex/uid377/glibc/lib/libc.so.6程序-Wl,--dynamic-linker=/home/ex/uid377/glibc/lib/ld-linux-x86-64.so.2

您可以通过运行以下命令来跟踪当前正在加载哪些库:

env LD_DEBUG=files,libs ./cat
于 2012-12-02T23:31:33.307 回答