是否可以更改 Perl 安装目录

Posted

技术标签:

【中文标题】是否可以更改 Perl 安装目录【英文标题】:Is it possible to change Perl installation directory 【发布时间】:2019-12-11 08:27:19 【问题描述】:

尝试从源代码构建 Perl 发行版。需要在构建之前指定安装目录,作为配置实用程序的参数(例如 /usr/local/myperl)。据我了解,如果我想在另一台主机上安装那个 Perl 发行版,它必须放在同一个目录(/usr/local/myperl)中。有没有办法让它与位置无关?我希望能够将它解压到任何目录(由主机所有者指定),设置必要的环境变量(PATH 等),以便它可以工作。

编辑: 使用 -Duserelocatableinc 选项创建了 Perl 5.30.0 发行版。 下面是perl -V 输出:

Summary of my perl5 (revision 5 version 30 subversion 0) configuration:

  Platform:
    osname=aix
    osvers=7.1.0.0
    archname=aix-thread-multi-64all
    uname='aix sss040 1 7 00fb05a44c00 '
    config_args='-desr -Dcc=gcc -maix64 -Duserelocatableinc -Dusethreads -Duse64bitall -Dprefix=/G/01/perl/5_30_0 -Aldflags=-L/usr/lib64 -L/opt/freeware/lib64 -L/opt/pware64/lib'
    hint=recommended
    useposix=true
    d_sigaction=define
    useithreads=define
    usemultiplicity=define
    use64bitint=define
    use64bitall=define
    uselongdouble=undef
    usemymalloc=n
    default_inc_excludes_dot=define
    bincompat5005=undef
  Compiler:
    cc='gcc -maix64 -maix64'
    ccflags ='-D_THREAD_SAFE -D_ALL_SOURCE -D_ANSI_C_SOURCE -D_POSIX_SOURCE -DUSE_NATIVE_DLOPEN -DNEED_PTHREAD_INIT -fwrapv -fno-strict-aliasing -pipe -maix64 -DUSE_64_BIT_ALL -D_FORTIFY_SOURCE=2'
    optimize='-O'
    cppflags='-D_THREAD_SAFE -D_ALL_SOURCE -D_ANSI_C_SOURCE -D_POSIX_SOURCE -DUSE_NATIVE_DLOPEN -DNEED_PTHREAD_INIT -fwrapv -fno-strict-aliasing -pipe'
    ccversion=''
    gccversion='6.3.0'
    gccosandvers=''
    intsize=4
    longsize=8
    ptrsize=8
    doublesize=8
    byteorder=87654321
    doublekind=4
    d_longlong=define
    longlongsize=8
    d_longdbl=define
    longdblsize=8
    longdblkind=0
    ivtype='long'
    ivsize=8
    nvtype='double'
    nvsize=8
    Off_t='off_t'
    lseeksize=8
    alignbytes=8
    prototype=define
  Linker and Libraries:
    ld='gcc -maix64 -maix64'
    ldflags =' -Wl,-brtl -Wl,-bdynamic -L/usr/lib64 -L/opt/freeware/lib64 -L/opt/pware64/lib -Wl,-b64'
    libpth=/opt/freeware/lib /opt/freeware/lib/gcc/powerpc-ibm-aix7.1.0.0/6.3.0/include-fixed /usr/lib /lib /usr/ccs/lib /usr/lib64
    libs=-lpthread -lbind -lnsl -lgdbm -ldbm -ldl -lld -lm -lcrypt -lpthreads -lc
    perllibs=-lpthread -lbind -lnsl -ldl -lld -lm -lcrypt -lpthreads -lc
    libc=
    so=a
    useshrplib=false
    libperl=libperl.a
    gnulibc_version=''
  Dynamic Linking:
    dlsrc=dl_aix.xs
    dlext=so
    d_dlsymun=undef
    ccdlflags='-Xlinker -bE:.../../lib/5.30.0/aix-thread-multi-64all/CORE/perl.exp'
    cccdlflags=' '
    lddlflags='  -Wl,-b64 -Wl,-bhalt:4 -Wl,-G -Wl,-bI:$(PERL_INC)/perl.exp -Wl,-bE:$(BASEEXT).exp -Wl,-bnoentry -lpthreads -lc -lm -L/usr/lib64 -L/opt/freeware/lib64 -L/opt/pware64/lib'


Characteristics of this binary (from libperl):
  Compile-time options:
    HAS_TIMES
    MULTIPLICITY
    PERLIO_LAYERS
    PERL_COPY_ON_WRITE
    PERL_DONT_CREATE_GVSV
    PERL_IMPLICIT_CONTEXT
    PERL_MALLOC_WRAP
    PERL_OP_PARENT
    PERL_PRESERVE_IVUV
    USE_64_BIT_ALL
    USE_64_BIT_INT
    USE_ITHREADS
    USE_LARGE_FILES
    USE_LOCALE
    USE_LOCALE_COLLATE
    USE_LOCALE_CTYPE
    USE_LOCALE_NUMERIC
    USE_LOCALE_TIME
    USE_PERLIO
    USE_PERL_ATOF
    USE_REENTRANT_API
    USE_THREAD_SAFE_LOCALE
  Built under aix
  Compiled at Aug 16 2019 08:41:27
  @INC:
    ../lib/site_perl/5.30.0/aix-thread-multi-64all
    ../lib/site_perl/5.30.0
    ../lib/5.30.0/aix-thread-multi-64all
    ../lib/5.30.0

【问题讨论】:

你的意思是你正在尝试为 perl 创建一个二进制发行版?什么操作系统? 是的,AIX 的二进制分发版。 【参考方案1】:

在 Perl 安装中通常有许多硬编码路径。你要找的是"Relocatable @INC"。

要创建可重定位的 perl 树,请使用以下命令行:

sh Configure -Duserelocatableinc

然后@INC 中的路径(以及 %Config 中的所有其他内容)可以是 可选地通过 perl 可执行文件的路径定位。

还请务必阅读 README.aix 以了解特殊的 AIX 说明。

【讨论】:

这通常有效,但我必须说,它不像我预期的那样“干净”。我必须在代码中另外指定 PERL5LIB=$PERL_HOME/lib 或“使用 lib ...”。否则它会给我错误(即使“perl”可通过 PATH 获得):Can't locate Config.pm in @INC(您可能需要安装 Config 模块)(@INC 包含:../lib/site_perl/5.30 .0/aix-thread-multi-64all ../lib/site_perl/5.30.0 ../lib/5.30.0/aix-thread-multi-64all ../lib/5.30.0)。 ...,因此,它并不是真正“通过 perl 可执行文件的路径定位”。也许我错过了什么? @AndyH 我刚刚验证了它适用于我™。 @INC contains: ../lib/site_perl/... 出乎意料,应该是 @INC contains: /path/to/your/perl/lib/site_perl/...。也许你有环境变量干扰?检查perl -V 这是perl -V的输出 @AndyH 这只是其中的一部分。 perl -V 有更多相关信息,例如 %ENV 中的内容以及您的编译标志是什么。

以上是关于是否可以更改 Perl 安装目录的主要内容,如果未能解决你的问题,请参考以下文章

如何格式化我的 Perl 代码,以便我可以从命令窗口更改我的调用并测试或不测试它?

window下安装perl

在主目录中安装perl模块时出现问题

如果使用Perl不存在目录,我该如何创建目录?

您好!想请问您一个关于perl安装路径及系统环境变量的问题。

windows下perl的安装和脚本的运行