如何修复"版本`GLIBC_2.14'未找到"错误?

lin*_*lof 4 c glibc shared-libraries

我在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))
Run Code Online (Sandbox Code Playgroud)

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

将服务器升级到最新的Debian版本不是我的首选选项,因为它不在我的直接控制之下.

我该如何解决这个问题?

acm*_*acm 8

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

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