我怎样才能解决为什么特定版本的库是在依赖关系?

我在ubuntu 12.04上使用cmake构build了一个大型的C ++项目,然后把得到的二进制包安装到Ubuntu 11.04上。 然而,程序失败,说它需要glibc版本2.14,但只能find版本2.13。 我怎样才能find为什么glibc => 2.14是必需的?

与大多数库不同,glibc版本符号。 每个符号都标有一个值(例如“GLIBC_2.3.4”),表示接口上次更改的库的版本。 这允许库包含给定符号的多个版本,并支持针对旧版本编译的二进制文件,同时保留进化的能力。 你可以用objdump -T /lib/libc.so.6看到这个细节。

基本上,您的应用程序中的某些内容与自11.04以来更改过的符号链接。 尝试objdump -T在你的二进制文件,看看它正在寻找什么标签。

但是广泛而言,向后兼容性在Linux中不起作用。 如果你想在老软件上运行一些东西,你应该使用旧软件来构建它。 可以在更新的发行版上设置向后兼容的工具链,但不是默认的。

在构建C ++项目时,它将链接到12.04安装中的glibc库的版本。 你的build命令中有哪些链接器选项?

不知道你在建什么,我想说你可能会更好,建立在11.04,然后在12.04运行。