2009-11-20 20 views
3

鉴于我编译的一些unix程序,我需要做些什么才能将其重定位到不同的目录并使其继续正常运行。ActivePerl在安装过程中“重新定位”文件时所做的工作是什么?

我在想Perl,但是会对像Apache这样的其他系统感兴趣,当它完成时它似乎也会失败。为了激发这个问题,当将其他系统捆绑为产品安装的一部分时,能够执行这种重定位将非常有用。

对于它的价值,是ActivePerl的安装过程似乎含有一些神奇的执行过程中安装搬迁..

Installing ActivePerl... 
Copying files to /opt/ActivePerl-5.8...done 
Relocating...done (164 files relocated) 
Generating HTML documentation...done 
Syncing perl PPM database with .packlists...done 

ActivePerl has been successfully installed at /opt/ActivePerl-5.8. 

谁能赐教为发生的事情背后的“搬迁......”一行?

回答

7

当你编译perl时,它需要某些位置的某些文件。你可以看到perl -V的一些路径。对于ActivePerl,当您想要移动整个安装时,您必须更新perl希望找到的东西以及其各种帮助程序希望找到的地方perl。查看ActiveState的文档reloc_perl,如果有的话也许看看源代码。

ActivePerl所做的一切与您对其他程序做什么没有大的关系。这取决于他们每个人所做的和期望的。

+2

这将是正确的答案。我为曾经拥有ActiveState的公司工作,并向ActivePerl作者询问这个问题。 – 2009-11-20 04:47:01

+0

酷 - 我从哪里开始学习如何解决如何对任意程序做这种事情? – 2009-11-20 05:37:39

+0

@Matt最后,我看了一下,该技术是将所有硬编码路径的根配置为“/ xxxXXXxxxREPLACEMExxxXXXxxx”之类的二进制文件,然后执行搜索并使用新的根目录替换二进制文件。它有点可怕,它的作品。我不知道它适用于所有的编译器和可执行格式。 – Schwern 2009-11-21 02:41:26

0

这取决于您在“重新定位”下的含义。您可以运行二进制文件,然后将其移动到另一个目录,它应该在Linux下运行。

因此,您可以编写一个程序,将您的所有二进制文件和配置文件移动到另一个目录,然后更改当前工作目录。

+0

我不确定它“应该只是工作” - 至少它似乎不适用于perl和apache(但对于它的价值,它适用于Java) – 2009-11-20 03:48:15

+0

如果您只移动perl二进制文件,它将工作,但如果您移动任何库,它将无法找到它们。他们的位置在二进制文件中被硬编码。 – Schwern 2009-11-21 02:42:55

+0

不在Linux中,库不能被硬编码。 使用LD_LIBRARY_PATH env。变量来为库添加搜索路径。 – Elalfer 2009-11-21 05:24:34

3

很多都取决于程序。某些程序相当独立,因此处理比其他在外部定位配置文件或其他较不宽容的元素中具有目录路径的程序更优雅。

+0

是的,我想我很想知道元素是什么,以及如何更新它们。例如,perl二进制文件似乎选取嵌入在二进制文件中的一些库路径。我想必须有一些方法来解决它们作为搬迁的一部分... – 2009-11-20 03:49:43

3

活动Perl不会在您的系统上编译perl,它只是解包并将其复制到正确的位置。

问题是,Perl安装包含许多需要安装特定信息的文件,例如在哪里可以找到库,安装位置等等。这些文件在重定位阶段被修改为具有正确的信息。

0

使用UltraEdit搜索并替换Perl安装下的所有文件:例如,从C:\ Perl64移动到G:\ Perl64时,将所有包含“C:\ Perl64”的文件替换为“G:\ Perl64 ”。在这个过程中,我们需要取消选中几个配置文件和exe文件的只读属性并重做替换。

相关问题