2011-07-16 122 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

相關問題