如何为其他计算机编译Linux可执行文件?

时间:2013-10-28 14:48:18

标签: c linux gcc

我用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 个答案:

答案 0 :(得分:2)

您必须在与目标计算机具有相同版本的glibc或旧版本的计算机上进行编译。共享库兼容性仅适用于该方向。

答案 1 :(得分:1)

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

然后你必须开始系统地复制这个环境。由于您使用libdbi,因此您应该彻底。数据库连接可以运行大块的系统API,所以你想要拥有完全相同的Linux版本,gcc(即使你不能运行它,你需要知道系统的其他部分的编译版本),和其他工具和库。如果不这样做,您将无法对开发机器测试转化为目标上的良好行为充满信心。

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

答案 2 :(得分:1)

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

Virtualbox适用于此

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

答案 3 :(得分:0)

您有以下选择:

  • 在服务器计算机上编译代码(可能已安装gcc)
  • 使用静态链接库编译程序(gcc选项 -static