Il mio compito iniziale era installare mod_perl 2.0.6 + Apache 2.2.22.
Il processo si è interrotto con molti errori relativi a off64_t
durante la compilazione di mod_perl. Così, ho iniziato a scavare più a fondo. In primo luogo, ho installato due nuove istanze di Perl 5.8.9 (perché dovrò usare questa versione): una versione con thread e una senza thread (sono identici, solo usethreads
differisce). Cercando di riprodurre lo stesso utilizzando il thread Perl finito con successo e senza errori off64_t
affatto.
La conclusione è ovvia: il Perl con thread fornisce il necessario off64_t
, quello non threadato no.
Cercando ulteriormente, ho confrontato config.h
(da core/<arch>/CORE
) di entrambi Perl'es, e alla linea 3671 che può vedere questo (in Perl non filettata):Perché un Perl non-threadato non sta usando il tipo off64_t rispetto a uno abilitato per i thread?
/* HAS_OFF64_T:
* This symbol will be defined if the C compiler supports off64_t.
*/
/*#define HAS_OFF64_T /**/
e nei fili abilitato Perl:
#define HAS_OFF64_T /**/
perl -V
per entrambe le istanze Perl riporta ccflags ='... -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 ...'
flag di compilazione ed usati.
Come ho capito, off64_t
viene utilizzato per file di grandi dimensioni e non è correlato ai thread. Ho trovato questa informazioni su off_t
e off64_t
:
Se la sorgente viene compilato con
_FILE_OFFSET_BITS = 64
questo tipo (cioèoff_t
) è trasparente sostituito daoff64_t
.
Poco: Ci sono 2 identici Perl costruisce con una sola differenza: il parametro usethreads
configure. Il Perl filettato abilita off64_t
, quello non a thread no.
La mia domanda è: Perché accade questo e come le discussioni sono collegati a questo tipo di dati off64_t
che dovrebbe essere utilizzato per i file di grandi dimensioni, non per le discussioni?
Info: Arch Linux sistema operativo a 32-bit (kernel 2.6.33), gcc 4.5.0, libc 2.11.1, standard di Perl 5.8.9
Note: off64_t
è trasformato in Configure
alla linea 15526, un semplice try.c
viene generato e provato a essere compilato. La domanda è: perché il Perl non-threadato non può compilarlo mentre è in grado di filtrare il Perl.
Si prega di indicare la distro e l'architettura –
e il sistema operativo :) –
Provare a compilare con 5.14.2, il bug è probabilmente già corretto perché i bug di build su Linux sono facilmente individuabili. 5.8.9 è ** [non supportato] (http://p3rl.org/perlpolicy#MAINTENANCE-AND-SUPPORT) ** più. Vedo che hai ragionevolmente versioni moderne di GCC, httpd e mod_perl, non ha senso aggrapparsi a un Perl per il quale nessuno è in grado di produrre un work-around o bug-fix. – daxim