我用 C 语言编写了一个 Linux 程序,我正试图让它在服务器系统上运行。看起来一切都应该工作,但是当我尝试它时,我得到了这个:
/lib64/libc.so.6: version `GLIBC_2.14' not found (required by <program>)
/lib64/libc.so.6: version `GLIBC_2.14' not found (required by ./libdbi.so.1)
<program>
(我的程序名称在哪里。)
据我所知,我的程序只需要那个版本的 GLIBC,因为 libdbi 需要。我试过从源代码编译 libdbi,它仍然试图链接到那个版本的 GLIBC。
我不拥有服务器系统(它是我运行网站的共享系统,并且可以通过 SSH 访问),所以我无法对其进行任何更改——这就是库文件位于同一目录中的原因,并且我已经设置了LD_LIBRARY_PATH=.
。不幸的是,我也无法访问它上面的编译器——当我尝试运行 GCC 时,我被告知“权限被拒绝”。它由一家大公司经营,我只是一个客户;他们应我的要求进行任何更改的机会基本上为零。
有什么方法可以在我的系统上编译程序,以便它可以在服务器上运行?
在我问之前,我发现了这些类似的问题:
使用不同的 glibc 库在 Linux 中编译 C 程序:答案中的链接转到 404 页面,据我所知,
apgcc
在 Debian 发行版上不可用。将共享库重新链接到不同版本的 libc:似乎说这个问题不存在,因为“glibc 倾向于向后兼容”(除非它们显然不是在这种情况下)。
如何编译 Linux C 程序以在另一台 Linux 机器上运行?: 建议一个
chroot
或虚拟机,我以前在其他地方做过,但是我怎么能告诉它在没有旧 GLIBC 版本的情况下使用 libc?是二进制可执行文件可移植:建议静态链接,但
libdbi
动态链接到其驱动程序文件,因此显然无法完成 - 我收到几个错误,涉及缺少的函数,如ldopen
.
还有其他的,但它们似乎是这些的变体。
如果我把它变成商业产品,我愿意使用非免费的解决方案(就像我在另一个我现在找不到的答案中看到的那样),但对于单一用途来说,它似乎是巨大的矫枉过正,而不是提及费用。
有什么方法可以简单地告诉 libdbi 链接到更高的 GLIBC 版本,也许?如果没有,有没有我忽略的解决方案?