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