4

我在 Ubuntu 12.04 下编译了一个 C 程序,用它构建了一个 Debian 软件包,并希望将它安装在运行 Debian Lenny 的服务器上。

上次我这样做(大约两个月前)它起作用了:我可以安装软件包并运行二进制文件。但现在我收到以下错误消息:

(binary's name): /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.14' not found (required by (binary's name))

除了将我的机器升级到 Ubuntu 12.4 之外,我们对代码带来的唯一重大变化是调用strdup(),为此我必须启用_POSIX_C_SOURCE=200809L功能测试宏。

将服务器升级到最新的 Debian 版本不是我的首选,因为它不受我的直接控制。

我该如何解决这个问题?

4

1 回答 1

8

我认为这里的关键信息是“升级我的机器”。那么,当这之前工作时,您是在 12.04 之前的版本上构建和打包的?如果是这样,那么问题是 12.04 现在附带了更新版本的 libc(显然是 2.14),并且您的二进制文件现在记录了对该版本 libc 的依赖关系。当您尝试在 Lenny 上运行时,它可能使用旧版本的 libc,链接器检测到 Lenny 版本不支持 2.14 API,并失败。

我认为最好的方法可能是在 12.04 上进行开发和测试,然后当你想为特定的 Debian 版本创建包时,使用pbuilder或类似的工具来创建 deb。这将确保用于打包构建的库与目标平台匹配。

于 2012-05-31T15:16:38.707 回答