3

鉴于我已经编译了一些 unix 程序,我可能需要做些什么才能将它重新定位到不同的目录并让它继续正确运行。

我正在考虑 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.

谁能告诉我“搬迁……”这条线背后发生了什么?

4

5 回答 5

7

当你编译 perl 时,它需要特定位置的特定文件。您可以使用perl -V. 对于 ActivePerl,当您想要移动整个安装时,您必须更新perl期望在哪里找到东西以及它的各种帮助程序期望在哪里找到perl。请参阅 ActiveState 的reloc_perl的文档,如果有的话,可以查看源代码。

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

于 2009-11-20T04:29:24.923 回答
3

很大程度上取决于程序。有些程序是相当独立的,因此比其他程序更优雅地处理移动,这些程序在外部定位的配置文件或其他不太宽容的元素中具有目录路径。

于 2009-11-20T03:29:32.313 回答
3

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

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

于 2009-11-20T04:26:10.623 回答
0

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

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

于 2009-11-20T03:25:08.687 回答
0

Using UltraEdit to search and replace all files under the Perl installation: for example, when move from C:\Perl64 to G:\Perl64, replace all files that contain "C:\Perl64" to "G:\Perl64". In the process, we need to uncheck several config files and exe file's read-only property and redo the replace.

于 2013-10-21T14:31:24.280 回答