2011-07-16 89 views
2

我编译perl的一个重新定位的@INC如下:这里用我刚刚编译好的perl发生了什么?

$ sh Configure -des -D prefix=~/perl -Duserelocatableinc 

我成立后,我的路径等我得到如下:

$ perl -e 'use strict; print "ok"' 
Can't locate strict.pm in @INC (@INC contains: ../lib/site_perl/5.12.4/darwin-2level ../lib/site_perl/5.12.4 ../lib/5.12.4/darwin-2level ../lib/5.12.4 .) at -e line 1. 
BEGIN failed--compilation aborted at -e line 1. 

如果我这样做,不过,一切一切都OK?

$ `which perl` -e 'use strict; print "ok"' 

我做错了什么?这是在OS X

下面是输出的perl -V:

$ perl -V 
Can't locate Config.pm in @INC (@INC contains:  ../lib/site_perl/5.12.4/darwin-2level ../lib/site_perl/5.12.4  ../lib/5.12.4/darwin-2level ../lib/5.12.4 .). 
BEGIN failed--compilation aborted. 

$ `which perl` -V 
Summary of my perl5 (revision 5 version 12 subversion 4) configuration: 

    Platform: 
    osname=darwin, osvers=10.8.0, archname=darwin-2level 
    uname='darwin fenchurch-2.local 10.8.0 darwin kernel version 10.8.0: tue  jun 7 16:33:36 pdt 2011; root:xnu-1504.15.3~1release_i386 i386 ' 
    config_args='-des -D prefix=/Users/kd/perl -Duserelocatableinc' 
    hint=recommended, useposix=true, d_sigaction=define 
    useithreads=undef, usemultiplicity=undef 
    useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef 
    use64bitint=define, use64bitall=define, uselongdouble=undef 
    usemymalloc=n, bincompat5005=undef 
    Compiler: 
    cc='cc', ccflags ='-fno-common -DPERL_DARWIN -no-cpp-precomp  -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include  -I/opt/local/include', 
    optimize='-O3', 
    cppflags='-no-cpp-precomp -fno-common -DPERL_DARWIN -no-cpp-precomp  -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include  -I/opt/local/include' 
    ccversion='', gccversion='4.2.1 (Apple Inc. build 5666) (dot 3)',  gccosandvers='' 
    intsize=4, longsize=8, ptrsize=8, doublesize=8, byteorder=12345678 
    d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16 
    ivtype='long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t',  lseeksize=8 
    alignbytes=8, prototype=define 
    Linker and Libraries: 
    ld='env MACOSX_DEPLOYMENT_TARGET=10.3 cc', ldflags =' -fstack-protector  -L/usr/local/lib -L/opt/local/lib' 
    libpth=/usr/local/lib /opt/local/lib /usr/lib 
    libs=-lgdbm -ldbm -ldl -lm -lutil -lc 
    perllibs=-ldl -lm -lutil -lc 
    libc=/usr/lib/libc.dylib, so=dylib, useshrplib=false, libperl=libperl.a 
    gnulibc_version='' 
    Dynamic Linking: 
    dlsrc=dl_dlopen.xs, dlext=bundle, d_dlsymun=undef, ccdlflags=' ' 
    cccdlflags=' ', lddlflags=' -bundle -undefined dynamic_lookup  -L/usr/local/lib -L/opt/local/lib -fstack-protector' 


Characteristics of this binary (from libperl): 
    Compile-time options: PERL_DONT_CREATE_GVSV PERL_MALLOC_WRAP USE_64_BIT_ALL 
         USE_64_BIT_INT USE_LARGE_FILES USE_PERLIO 
         USE_PERL_ATOF 
    Built under darwin 
    Compiled at Jul 16 2011 15:44:19 
    %ENV: 
    PERL_MM_USE_DEFAULT="1" 
    @INC: 
    /Users/kd/perl/lib/site_perl/5.12.4/darwin-2level 
    /Users/kd/perl/lib/site_perl/5.12.4 
    /Users/kd/perl/lib/5.12.4/darwin-2level 
    /Users/kd/perl/lib/5.12.4 
    . 
+0

什么你安装perl用? – zellio

+1

有没有可能你有一个perl的别名? –

+0

没有别名perl。我使用上面的configure命令安装了perl,然后make && make test && make install – singingfish

回答

0

你得到perl -V什么?使用大写字母V显示版本和编译选项,包括@INC目录。确保这些目录是模块所在的位置。

还要注意的是,在prefix,你提名的安装目录,所以perl应在〜/的Perl /斌/ perl的。你正在运行的是perl?我不希望which发现,除非你已经调整了你的PATH

0

我无法想象这样一个场景,你宁愿预编译Perl解释器有一个新的@INC路径,而不是仅仅将其设置到环境或在Perl脚本本身中建立它。

将一个新的lib路径编译成Perl看起来过于脆弱。

我觉得你好得多把它当作一个参数:

PERL5LIB="/my/new/path":$PERL5LIB /path/to/my/script.pl 

或脚本本身里面,因为你已经知道所需的路径:

push(@INC, "/my/new/path"); 
+1

“我无法想象一种情况,您宁愿预编译Perl解释器时使用新的@INC路径,而不是将其设置到环境中或在Perl脚本中自行建立。”如果您使用perl来开发应用程序,不要使用perl系统,使用你自己的。系统perl是针对系统的,供应商通常会提供一个破损的perl或从你的下方拉出地毯。 – singingfish

相关问题