答案1
简短回答
Debian Wheezy 上的GNUlibc
库太旧,无法运行您需要的程序。
长答案
这个广泛使用的标准 C 库 GNU
libc
(简称“glibc”)努力保持与旧应用程序的向后兼容性,同时在实现的功能方面仍在向前迈进。为了实现这一点,它对其“符号”进行了版本控制。
符号是库“导出”的函数和变量的名称 - 可供与库“链接”的程序代码使用。
GNU
libc
库的每个新版本都会在其导出的符号中进行某些更改,并会获得一个特定的符号表条目,用于标识此库的特定版本。您可以将其视为此库提供的特定保证功能集的“句柄”。这是由编译器透明地完成的,它将已编译程序的代码与 glibc 链接起来。
无论使用什么编译器来编译和链接你的程序,它都可以在安装了 glibc 2.15 的系统上运行,因此生成的程序现在“需要” glibc 2.15 或更高版本。
现在看看我的 Debian Jessie (8.0) 有什么 glibc 版本:
$ apt-cache policy libc6
libc6:
Installed: 2.19-18+deb8u4
Candidate: 2.19-18+deb8u4
Version table:
*** 2.19-18+deb8u4 0
500 http://http.debian.net/debian/ jessie/main amd64 Packages
...
但如果我们看看Wheezy 有,我们将看到它是 2.13 — 比你的程序所需的版本“早”两个版本。
该怎么办呢?
如果无法重建该程序(我相信不可能),那么您只有两个选择:
以某种方式将较新的 glibc 引入系统并让程序“看到”它。
理论上,应该可以构建一个较新的 glibc,并在过程中以某种方式对其进行配置,以便将其安装在非标准位置 - 例如在
/opt/glibcX.Y
或类似的地方。有了较新的 glibc 版本,您可以采用标准“技巧”让您的程序使用非标准库:
LD_PRELOAD
环境变量。如下所示:$ LD_PRELOAD=/opt/glibcX.Y/libc6.so ./myprogram
升级您的 Debian 安装。
如果您不太热衷于建造东西和修理低级机械,第二种选择可能是解决手头问题的更简单的方法。