My initial task was to install mod_perl 2.0.6 + Apache 2.2.22.
The process stopped with a lot of errors related to off64_t
when compiling mod_perl. So, I started to dig deeper. Firstly, I have installed two new instances of Perl 5.8.9 (because I'll have to use this version): a threaded version and a not-threaded one (they are identical, only usethreads
differs). Trying to reproduce the same using the threaded Perl finished with success and no off64_t
errors at all.
The conclusion is obvious: threaded Perl provides the neccessary off64_t
, the non-threaded one doesn't.
Searching further, I have compared config.h
(from core/<arch>/CORE
) of both Perl'es, and at the line 3671 I can see this (in the non-threaded Perl):
/* HAS_OFF64_T:
* This symbol will be defined if the C compiler supports off64_t.
*/
/*#define HAS_OFF64_T / **/
and in the threads-enabled Perl:
#define HAS_OFF64_T /**/
perl -V
for both Perl instances reports ccflags ='... -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 ...'
as used compiler flags.
As I understand, off64_t
is used for large files and isn't related to threads. I found this information about off_t
and off64_t
:
If the source is compiled with
_FILE_OFFSET_BITS = 64
this type (i.e.off_t
) is transparently replaced byoff64_t
.
Shortly: There are 2 identical Perl builds with a single difference: the usethreads
configure parameter. Threaded Perl enables off64_t
, non-threaded one doesn't.
My question is: Why does this happen and how threads are connected to this off64_t
data type that should be used for large files, not for threads ?
Info: Arch Linux OS 32-bit (kernel 2.6.33), gcc 4.5.0, libc 2.11.1, standard Perl 5.8.9
Notes: off64_t
is processed in Configure
at line 15526, a simple try.c
is generated and tried to be compiled. The question is why the not-threaded Perl cannot compile it while threaded Perl can.