我在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
功能测试宏。< / p>
将服务器升级到最新的Debian版本不是我的首选选项,因为它不在我的直接控制之下。
如何解决此问题?
答案 0 :(得分:8)
我认为这里的关键信息是'升级我的机器'。所以当这个工作之前,你在12.04之前的东西上建造和包装?如果是这样,那么问题是12.04现在附带了更新版本的libc(显然是2.14),你的二进制文件现在记录了对该版本libc的依赖。当您尝试在可能使用较旧版本的libc的Lenny上运行时,链接器检测到Lenny版本不支持2.14 API,并且失败。
我认为最好的方法可能是在12.04进行开发和测试,然后当你想为特定的Debian版本创建软件包时,使用pbuilder或类似的方法创建debs。这将确保用于打包构建的库与目标平台匹配。