C 如何为不同的机器编译Linux可执行文件?
我已经用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'(所
/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页面,根据我的判断,
在Debian发行版上不可用apgcc
- :似乎说这个问题不存在,因为“glibc倾向于向后兼容”(除非在这种情况下它们显然不兼容)
- :建议使用
或虚拟机,这是我以前在其他地方做过的,但是如果没有旧的GLIBC版本,我如何告诉它使用libc呢chroot
- :建议静态链接,但
动态链接到其驱动程序文件,因此这显然无法完成--我遇到了一些错误,涉及到缺少的函数,如libdbi
ldopen
有没有办法简单地告诉libdbi链接到更高版本的GLIBC?如果没有,是否有我忽略的解决方案?您有以下选项:
- 在服务器机器上编译代码(可能已安装gcc)
- 使用静态链接库编译程序(对于gcc,选项-static)
- 在服务器机器上编译代码(可能已安装gcc)
- 使用静态链接库编译程序(对于gcc,选项-static)
libdbi
,所以应该彻底检查。数据库连接可以使用大量的系统API,因此您希望使用完全相同版本的Linux、gcc(即使无法运行它,也需要知道系统其他部分编译时使用的版本)以及其他工具和库。如果不这样做,您将无法对开发机器测试转化为目标上的良好行为抱有很大信心
虚拟机是一种很好的方法,可以创建专门的开发环境,而不会弄乱现有的环境。大公司与否,如果您以任何方式为服务付费或为满足某个需求而为开发付费,他们至少应该对运行时环境进行仔细描述,以便您可以在开发机器上复制它 然后你必须着手系统地复制这个环境。因为您使用的是
libdbi
,所以应该彻底检查。数据库连接可以使用大量的系统API,因此您希望使用完全相同版本的Linux、gcc(即使无法运行它,也需要知道系统其他部分编译时使用的版本)以及其他工具和库。如果不这样做,您将无法对开发机器测试转化为目标上的良好行为抱有很大信心
虚拟机是一种很好的方法,可以创建专门的开发环境,而不会弄乱现有的开发环境。了解服务器使用的Linux版本,获取它的副本并将其安装到VM中 Virtualbox对此很有好处
您可以使用此环境测试代码以及此特定编译问题找出服务器使用的Linux版本,获取其副本并将其安装到VM中 Virtualbox对此很有好处
您可以使用此环境测试代码以及此特定编译问题谢谢,但这两个选项都不可用
libdbi
无法静态编译,并且我没有在服务器上使用GCC的权限。有关这两个选项的详细信息,请参见原始问题。谢谢,但这两个选项都不可用libdbi
无法静态编译,并且我没有在服务器上使用GCC的权限。有关这两个方面的详细信息,请参见原始问题。谢谢。结果他们用的是CentOS6,很明显