Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何为不同的机器编译Linux可执行文件?_C_Linux_Gcc - Fatal编程技术网

C 如何为不同的机器编译Linux可执行文件?

C 如何为不同的机器编译Linux可执行文件?,c,linux,gcc,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) /lib64/libc.so.6:找不到版本'GLIBC_2.14'(所

我已经用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)
/lib64/libc.so.6:找不到版本'GLIBC_2.14'(所需)
/lib64/libc.so.6:找不到版本'GLIBC_2.14'(为./libdbi.so.1所需)
(其中
是我的程序名。)

就我所知,我的程序只需要那个版本的GLIBC,因为libdbi需要。我曾尝试从源代码处编译libdbi,但它仍试图链接到该版本的GLIBC

我没有服务器系统(它是一个共享系统,我在上面运行网站,并且有SSH访问权),所以我不能对它进行任何更改——这就是为什么库文件位于同一目录中,并且我设置了
LD\u library\u PATH=。
。不幸的是,我也不能访问它的编译器——当我尝试运行GCC时,我被告知“权限被拒绝”。它是由一家大公司经营的,我是唯一的客户;他们在我的要求下做出任何改变的机会基本上是零

有没有办法在我的系统上编译程序,使它在服务器上工作

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

  • :答案中的链接指向404页面,根据我的判断,
    apgcc
    在Debian发行版上不可用

  • :似乎说这个问题不存在,因为“glibc倾向于向后兼容”(除非在这种情况下它们显然不兼容)

  • :建议使用
    chroot
    或虚拟机,这是我以前在其他地方做过的,但是如果没有旧的GLIBC版本,我如何告诉它使用libc呢

  • :建议静态链接,但
    libdbi
    动态链接到其驱动程序文件,因此这显然无法完成--我遇到了一些错误,涉及到缺少的函数,如
    ldopen

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

如果我把它变成商业产品,我愿意使用非免费的解决方案(就像我在另一个答案中看到的一样,我现在找不到),但对于一次使用来说,这似乎是巨大的过度使用,更不用说费用了


有没有办法简单地告诉libdbi链接到更高版本的GLIBC?如果没有,是否有我忽略的解决方案?

您有以下选项:

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

您有以下选项:

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

您必须在与目标机器具有相同版本的glibc的机器上编译它,或者在旧版本的机器上编译它。共享库兼容性只能在这个方向上工作。

您必须在与目标计算机具有相同版本的glibc或更旧版本的计算机上编译它。共享库兼容性仅在这一方面起作用。

无论是否是大公司,如果您以任何方式为服务付费或为满足某项要求而为开发付费,他们至少应该仔细描述运行时环境,以便您可以在开发机器上复制它

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


虚拟机是一种很好的方法,可以创建专门的开发环境,而不会弄乱现有的环境。

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

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


虚拟机是一种很好的方法,可以创建专门的开发环境,而不会弄乱现有的开发环境。

了解服务器使用的Linux版本,获取它的副本并将其安装到VM中

Virtualbox对此很有好处


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

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

Virtualbox对此很有好处


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

谢谢,但这两个选项都不可用
libdbi
无法静态编译,并且我没有在服务器上使用GCC的权限。有关这两个选项的详细信息,请参见原始问题。谢谢,但这两个选项都不可用
libdbi
无法静态编译,并且我没有在服务器上使用GCC的权限。有关这两个方面的详细信息,请参见原始问题。谢谢。结果他们用的是CentOS6,很明显