0

我用 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 时,我被告知“权限被拒绝”。它由一家大公司经营,我只是一个客户;他们应我的要求进行任何更改的机会基本上为零。

有什么方法可以在我的系统上编译程序,以便它可以在服务器上运行?

在我问之前,我发现了这些类似的问题:

还有其他的,但它们似乎是这些的变体。

如果我把它变成商业产品,我愿意使用非免费的解决方案(就像我在另一个我现在找不到的答案中看到的那样),但对于单一用途来说,它似乎是巨大的矫枉过正,而不是提及费用。

有什么方法可以简单地告诉 libdbi 链接到更高的 GLIBC 版本,也许?如果没有,有没有我忽略的解决方案?

4

4 回答 4

2

您必须在与目标机器具有相同版本 glibc 或旧版本的机器上编译它。共享库兼容性仅在该方向上起作用。

于 2013-10-28T15:36:21.550 回答
2

大公司与否,如果您以任何方式为服务付费或为满足要求而为开发付费,他们至少欠您一个对运行时环境的仔细描述,以便您可以在开发机器上复制它。

然后你必须着手系统地复制这个环境。既然你正在使用libdbi,你应该彻底。数据库连接可以使用系统 API 的很大一部分,因此您希望拥有完全相同的 Linux 版本 gcc(即使您无法运行它,您也需要知道系统其他部分编译时使用的版本),和其他工具和库。如果您不这样做,您将无法确信您的开发机器测试会转化为目标上的良好行为。

虚拟机是创建专用开发环境而又不会破坏现有环境的好方法。

于 2013-10-28T15:45:24.207 回答
1

找出服务器使用的 Linux 版本,获取它的副本并将其安装在 VM 中

Virtualbox对此有好处

您可以使用这个环境来测试代码以及​​这个特定的编译问题

于 2013-10-28T15:46:05.847 回答
0

您有以下选择:

  • 在服务器机器上编译你的代码(可能安装了 gcc)
  • 使用静态链接库编译程序(gcc 的选项-static )
于 2013-10-28T14:52:17.057 回答