Mi tarea inicial era instalar mod_perl 2.0.6 + Apache 2.2.22. El proceso se detuvo con muchos errores relacionados con off64_t
al compilar mod_perl. Entonces, comencé a cavar más profundo. En primer lugar, he instalado dos nuevas instancias de Perl 5.8.9 (porque tendré que usar esta versión): una versión con subprocesos y una sin subprocesos (son idénticos, solo difieren usethreads
). Intentando reproducir el mismo usando el Perl enhebrado terminado con éxito y sin errores off64_t
en absoluto.
La conclusión es obvia: Perl con rosca proporciona el necesario off64_t
, el no roscado no.
Busca más lejos, han comparado config.h
(de core/<arch>/CORE
) de ambos Perl'es, y en la línea 3671 I puede ver esto (en el Perl no roscada):¿Por qué un Perl sin subprocesos no usa el tipo off64_t en comparación con uno habilitado para subprocesos?
/* HAS_OFF64_T:
* This symbol will be defined if the C compiler supports off64_t.
*/
/*#define HAS_OFF64_T /**/
y en los hilos habilitado Perl:
#define HAS_OFF64_T /**/
perl -V
para ambos casos Perl anuncia ccflags ='... -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 ...'
opciones del compilador como usados.
Según tengo entendido, off64_t
se utiliza para archivos de gran tamaño y no está relacionado con los hilos. He encontrado esta información sobre off_t
y off64_t
:
Si la fuente se compila con
_FILE_OFFSET_BITS = 64
este tipo (es deciroff_t
) se sustituye de forma transparente poroff64_t
.
Poco: Hay 2 idénticos Perl construye con una única diferencia: el parámetro de configuración usethreads
. Threaded Perl habilita off64_t
, uno sin hilos no.
Mi pregunta es: por qué sucede esto y cómo los hilos se conectan a esta off64_t
tipo de datos que se debe utilizar para archivos de gran tamaño, no para las discusiones?
Info: Arch Linux SO de 32 bits (kernel 2.6.33), gcc 4.5.0, 2.11.1 libc, Perl estándar 5.8.9
Notas: off64_t
se procesa en Configure
en la línea 15526, una simple try.c
se genera e intenta compilarse. La pregunta es por qué el Perl sin subprocesos no puede compilarlo mientras que Perl con subprocesos puede hacerlo.
Por favor, indique distro y arquitectura –
y sistema operativo :) –
Intente compilar con 5.14.2, el error probablemente ya está solucionado porque los errores de compilación en Linux se detectan fácilmente. 5.8.9 es ** [no admitido] (http://p3rl.org/perlpolicy#MAINTENANCE-AND-SUPPORT) ** más. Veo que tiene versiones razonablemente modernas de GCC, httpd y mod_perl, no tiene sentido aferrarse a un Perl para el que nadie probablemente produzca una solución alternativa o una corrección de errores. – daxim