我在ubuntu 12.04上使用cmake构建一个大型C ++项目,然后获取生成的二进制包并尝试在ubuntu 11.04上运行它。然而程序失败说它需要glibc版本2.14但只能找到2.13版本。 我怎样才能确切了解为什么需要glibc => 2.14?
答案 0 :(得分:3)
与大多数库不同,glibc会对其符号进行版本控制。每个符号都标有一个值(例如“GLIBC_2.3.4”),表示最后一次更改接口的库的版本。这允许库包含给定符号的多个版本,并支持针对旧版本编译的二进制文件,同时保留进化的能力。您可以使用objdump -T /lib/libc.so.6
查看此详细信息。
基本上,您的应用中的某些内容与自11.04以来更改过的符号相关联。在二进制文件上尝试objdump -T
,看看它正在寻找什么标签。
但从广义上讲,向后兼容性不像Linux那样有效。如果你想在旧软件上运行某些东西,你应该在旧软件上构建它。可以在最近的发行版上设置向后兼容的工具链,但这不是默认设置。
答案 1 :(得分:0)
构建C ++项目时,它将链接到12.04安装上的glibc库版本。您的构建命令中有哪些链接器选项?
如果不确切知道你正在构建什么,我会说你可能会更好地建立在11.04上,然后在12.04上运行。