【发布时间】:2013-10-28 14:48:17
【问题描述】:
我用 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 时,我被告知“权限被拒绝”。它由一家大公司经营,而我只是一个客户;他们应我的要求进行任何更改的机会基本上为零。
有什么方法可以在我的系统上编译程序,以便它可以在服务器上运行?
在我问之前,我发现了这些类似的问题:
Compile C program in Linux with different glibc library:答案中的链接指向 404 页面,据我所知,
apgcc在 Debian 发行版上不可用。Relink a shared library to a different version of libc: 似乎说这个问题不存在,因为“glibc 倾向于向后兼容”(除非它们显然不是在这种情况下)。
How to compile Linux C program to run on another Linux machine?:建议使用
chroot或虚拟机,我以前在其他地方做过,但是我如何告诉它使用没有旧 GLIBC 版本的 libc?is binary executable file portable:建议静态链接,但
libdbi动态链接到其驱动程序文件,因此显然无法完成 - 我收到几个错误,涉及缺少的函数,如ldopen。
还有其他的,但它们似乎是这些的变体。
如果我把它变成商业产品,我愿意使用非免费的解决方案(就像我在另一个我现在找不到的答案中看到的那样),但对于单次使用来说,它似乎是巨大的矫枉过正,更不用说费用了。
有什么方法可以简单地告诉 libdbi 链接到更高版本的 GLIBC 吗?如果没有,有没有我忽略的解决方案?
【问题讨论】: