2017-04-10 41 views
0

我有一台电脑因安全原因不能连接到互联网。它正在运行Linux。在单独的计算机上,我有用于Linux的代码和交叉编译器。当我将程序移动到离线Linux计算机上时,由于出现错误“未找到GLIBC_2.17版本”,我无法执行它。“如何复制libc的新版本?

检查/ lib后,我发现确实只有版本2.13的libc。在我的开发计算机上,我有用于编译该程序的2.22版本的所有相关文件。我想以某种方式将我的开发计算机上的这个libc版本复制到我的离线计算机上,以便我可以运行我的程序。

问题是,我似乎无法复制文件。试图这样做给出了一个错误:

mv: error writing ‘./libc.so.6’: No space left on device 

或类似的东西。我知道这并不是因为设备上没有剩余空间,因为我没有太多设备,我可以将这些文件复制到其他位置的文件系统中,而不是/ lib目录。我怎样才能将我新版本的libc移植到离线计算机上?

+0

您的离线计算机是否安装了一些Linux发行版,以及哪一个?你能用最近足够的glibc来更新你的发行版到更新的版本吗? (或者静态编译你的程序,如果目标PC的内核具有glibc所需的所有功能,它将运行**)。 – osgx

回答

1

I would like to somehow copy this version of libc on my development computer over to my offline computer so that I can run my program.

你的“下线”的计算机上更新不正确的libc是致使不能启动一个非常简单的方法。除非你明白自己在做什么(你明显不这么做),除非你知道如何在发生故障时恢复“离线”计算机,否则不应该尝试这种方式。

的最佳方法是使用“离线”的计算机上的软件包管理器安装正确的libc包(细节变化上正在使用的软件包管理器)。

如果程序包管理方法不起作用,您可以复制单个文件。 Hoever注意,系统ld-linux.solibc.so.6必须始终,或动态链接程序(你的shell,cpmv等)将打破匹配

,因为你需要同时更新两个文件,怎么能这样做?您需要静态链接cp的副本。最好还有一个静态链接副本$SHELLln(以防万一你犯了错误)。

+0

为什么'ld-linux.so'和'libc.so'必须匹配? ld-linux应该能够加载大多数ELF,并且在ifunc之类的一些高级功能的情况下只能行为不端。 ld-linux和libc.so都可以保存在其他地方,并通过手动启动ld-linux并使用env变量(路径为libc.so)来使用(当计算机在线时)... – osgx

+1

ld-linux和libc.so .6 *必须*完全匹配*(来自相同的构建),因为它们之间具有私有的未版本化二进制接口。以下是错误示例,当它们不匹配时:http://stackoverflow.com/q/847179/50617 –

相关问题