This is a discussion on Re: make fails compiling mp2+httpd 2.2.3 - modperl ; Morad IGMIR wrote: > I've been having problems compiling mod_perl for several hours now, > I'm compiling it using gcc 3.3.4 and libc-2.3.5 on a 2.4.31 linux > kernel ( distro : slackware 10.2 ) > I dont understand, since ...
Morad IGMIR wrote:
> I've been having problems compiling mod_perl for several hours now,
> I'm compiling it using gcc 3.3.4 and libc-2.3.5 on a 2.4.31 linux
> kernel ( distro : slackware 10.2 )
> I dont understand, since this has been flawlessly working so far for the
> last few months.
> /opt/httpd-2.2.3/srclib/apr/include/apr.h:270: error: parse error before
this is a Large File Support conflict.
### Picking the right LFS support flags for mod_perl, by Joe Orton ###
# on Unix systems where by default off_t is a "long", a 32-bit integer,
# there are two different ways to get "large file" support, i.e. the
# ability to manipulate files bigger than 2Gb:
# 1) you compile using -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64. This
# makes sys/types.h expose off_t as a "long long", a 64-bit integer, and
# changes the size of a few other types too. The C library headers
# automatically arrange to expose a correct implementation of functions
# like lseek() which take off_t parameters.
# 2) you compile using -D_LARGEFILE64_SOURCE, and use what is called the
# "transitional" interface. This means that the system headers expose a
# new type, "off64_t", which is a long long, but the size of off_t is not
# changed. A bunch of new functions like lseek64() are exposed by the C
# library headers, which take off64_t parameters in place of off_t.
# Perl built with -Duselargefiles uses approach (1).
# APR HEAD uses (2) by default. APR 0.9 does not by default use either
# approach, but random users can take a httpd-2.0.49 tarball, and do:
# export CPPFLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
# to build a copy of apr/httpd which uses approach (1), though this
# isn't really a supported configuration.
# The problem that mod_perl has to work around is when you take a
# package built with approach (1), i.e. Perl, and any package which was
# *not* built with (1), i.e. APR, and want to interface between
# them. 
# So what you want to know is whether APR was built using approach (1)
# or not. APR_HAS_LARGE_FILES in HEAD just tells you whether APR was
# built using approach (2) or not, which isn't useful in solving this
# : In some cases, it may be OK to interface between packages which
# use (1) and packages which use (2). APR HEAD is currently not such a
# case, since the size of apr_ino_t is still changing when
# _FILE_OFFSET_BITS is defined.
# If you want to see how this matters, get some httpd function to do at
# the very beginning of main():
# printf("sizeof(request_rec) = %lu, sizeof(apr_finfo_t) = %ul",
# sizeof(request_rec), sizeof(apr_finfo_t));
# and then put the same printf in mod_perl somewhere, and see the
# differences. This is why it is a really terribly silly idea to ever
# use approach (1) in anything other than an entirely self-contained
# there is no conflict if both libraries either have or don't have
# large files support enabled
Philip M. Gollucci (email@example.com) 323.219.4708
Consultant / http://p6m7g8.net/Resume/resume.shtml
Senior Software Engineer - TicketMaster - http://ticketmaster.com
1024D/A79997FA F357 0FDD 2301 6296 690F 6A47 D55A 7172 A799 97F
When I call your name, Girl, it starts to flame
Burning in my heart, Tearing it all apart..
No matter how I try My love I cannot hide....