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