2012-05-06 10 views
6

İlk görevim mod_perl 2.0.6 + Apache 2.2.22'yi yüklemek oldu.
Mod_perl derlenirken işlem, off64_t ile ilgili birçok hatayla durdu. Böylece daha derine inmeye başladım. Öncelikle, iki yeni Perl 5.8.9 örneğini yükledim (çünkü bu sürümü kullanmam gerekecek): bir dişli sürüm ve bir iş parçacığı olmayan (aynıdır, yalnızca usethreads farklıdır). Dişli Perl kullanarak aynı şeyi çoğaltmaya çalışmak, başarı ile bitmiş ve hiç off64_t hata içermez.
Sonuç şu: bariz Perl, off64_t nolu, iş parçacığı olmayan dişliyi içeriyor. ayrıca arama
, I config.h iki Perl'es arasında (core/<arch>/CORE den) karşılaştırılmıştır ve hat 3671 de I (dişli olmayan Perl) görebilirsiniz:Neden olmayan bir Perl, iş parçacığı etkin olanla karşılaştırıldığında off64_t türünü kullanmıyor?

/* HAS_OFF64_T: 
    *  This symbol will be defined if the C compiler supports off64_t. 
    */ 
    /*#define  HAS_OFF64_T   /**/ 

ve ipliklerin özellikli Perl: Her iki Perl örnekleri için

#define HAS_OFF64_T   /**/ 

perl -Vccflags ='... -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 ...' olarak kullanılan derleyici bayrakları bildirir.

Anladığım kadarıyla büyük dosyaları için off64_t kullanılır ve konuyla ilgisi yoktur. Kaynak şeffaf off64_t ile değiştirilir _FILE_OFFSET_BITS = 64 bu tip (diğer bir deyişle off_t) ile derlendiği

: I off_t ve off64_t ilgili bu bilgi bulunamadı. Kısa bir süre

: usethreads yapılandırma parametresi: 2 aynı Perl, tek fark oluşturur vardır. Dişli Perl, off64_t'u sağlar, dişli olmayan bir tane yoktur.

Soruma İşte soru: Neden bu büyük bir dosya için kullanılmalı iş parçacığı için kullanılacak bu off64_t veri türüne neden ve nasıl bağlanır?

Bilgi: Arch Linux OS 32 bit 2.11.1 libc (çekirdek 2.6.33), gcc 4.5.0, standart Perl 5.8.9

Notlar: off64_t hattı 15526 de Configure işlenir, bir Basit try.c oluşturulur ve derlenmeye çalışıldı. Soru, Perl'in işlenmemiş parçacığı olmasa bile, Perl-olmayan Perl'in onu derleyememesidir.

+0

Lütfen dağıtım ve mimariyi belirtin –

+0

ve işletim sistemi :) –

+0

Linux ile ilgili hatalar kolayca tespit edilebildiğinden, 5.14.2 ile derlemeye çalıştığınızda hata büyük olasılıkla zaten giderilmiştir. 5.8.9 ** [desteklenmiyor] (http://p3rl.org/perlpolicy#MAINTENANCE-AND-SUPPORT) ** artık. Gördüğünüz gibi, GCC'nin, httpd ve mod_perl'in oldukça modern sürümlerine sahip olursunuz, hiç kimsenin bir çalışma ya da hata düzeltmesi yapamayacağı bir Perl'e yapışmak hiçbir anlam ifade etmez. – daxim

cevap

3

kendi soruya cevap eğer kabul edilen bir davranış emin olduğunu değilim ama çözüm için arama ve sadece benim ödev başkalarının yapmasını beklemiyor iken, bunun diğer insanlar için yararlı olacağını düşündüğümüz Bunu okuyor.

Kısaca, benim sorunun cevabı -D_GNU_SOURCE gcc derleyici bayrağı ve ipler bu off64_t tipiyle ortak noktamız yok gibi görünüyor.

O -DusethreadsConfigure için kullanıldığı zaman, hints/linux.sh kullanılır ve aşağıdaki kod çalıştırıldığında görünür:

case "$usethreads" in 
$define|true|[yY]*) 
    ccflags="-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS $ccflags" 

sonra kod bir çok şey kullanılmasını sağlar tanımlanan _GNU_SOURCE, (derlendi Bu iş parçacığı gibi yanıtlanır: What does “#define _GNU_SOURCE” imply?).

Perl, thread desteği olmaksızın oluşturulduğunda, bu bayraklar atlanır ve başlık dosyalarından çok sayıda bit yorumlanmaya devam eder.
Perl'in bundan etkilenmediği anlaşılıyor. Apache'nin eski sürümleri bile değildi, ancak Apache 2.2+, _GNU_SOURCE tarafından etkinleştirilen kodu kullanmaya başladı ve mod_perl numaralı bina, eskisi kadar kolay değil.

Bu konuda kimlerin dikkat etmesi gerektiğini bilmiyorum. Belki çekirdek Perl bakıcılar kendilerini, belki Apache muhafızları, belki de kimse ve sadece benim partiler vaka veya derleyici sorunları.

Sonuç: Sonuç olarak Perl .h dosyaları #define s yorumladı ve Apache 2.2+ kaynaklarına karşı bina mod_perl başarısız bir sürü var, _GNU_SOURCE kullanılmaz değil parçacıklı Perl oluştururken. Perl oluştururken ek bir -Accflags='-D_GNU_SOURCE' eklenmelidir.

Diğer cevaplar da açığız. Belki yanılıyor ya da sadece buzdağınınüstünü görüyorum.

İlgili konular