Sorry for the slow reply.
I cannot reproduce the problem here on Windows. Your example module
loads up fine with all the "use APR" lines uncommented.
The build system (and the means by which APR::* should be loadable
without mod_perl.so being loaded) is different on Windows, but I did
notice this:
ap_strchr seems to only be used in xs\Apache2\Module\Apache2__Module.h
but when I run Module.c through the preprocessor I find that ap_strchr
gets changed to strchr, and the latter is simply imported from the C
run-time library.
I guess that's down to this code in httpd.h:
#ifdef AP_DEBUG
#undef strchr
# define strchr(s, c) ap_strchr(s,c)
#undef strrchr
# define strrchr(s, c) ap_strrchr(s,c)
#undef strstr
# define strstr(s, c) ap_strstr(s,c)
#else
/** use this instead of strchr */
# define ap_strchr(s, c) strchr(s, c)
/** use this instead of strchr */
# define ap_strchr_c(s, c) strchr(s, c)
/** use this instead of strrchr */
# define ap_strrchr(s, c) strrchr(s, c)
/** use this instead of strrchr */
# define ap_strrchr_c(s, c) strrchr(s, c)
/** use this instead of strrstr*/
# define ap_strstr(s, c) strstr(s, c)
/** use this instead of strrstr*/
# define ap_strstr_c(s, c) strstr(s, c)
#endif
so presumably I do not have AP_DEBUG defined for my build (even though
it was a debug build).
It looks like AP_DEBUG should not be defined, even in maintainer mode,
according to an old Changes entry:
remove -DAP_HAVE_DESIGNATED_INITIALIZER and -DAP_DEBUG from
MP_MAINTAINER mode to avoid collisions [Joe Orton]
but do you somehow have AP_DEBUG defined somewhere, which causes the
replacement of ap_strchr with strchr to not happen for you?
On 27 March 2015 at 09:14, Jie Gao <J.Gao@sydney.edu.au> wrote:
> Hi All
>
> I had some more time looking into this, and here's some info I can provide.
>
> --------------------------------------------------------------------------
>
> # readelf -a /usr/local/lib/perl5/site_perl/5.20.2/x86_64-linux-thread-multi/auto/APR/APR.so
> ELF Header:
> Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
> Class: ELF64
> Data: 2's complement, little endian
> Version: 1 (current)
> OS/ABI: UNIX - System V
> ABI Version: 0
> Type: DYN (Shared object file)
> Machine: Advanced Micro Devices X86-64
> Version: 0x1
> Entry point address: 0x1cb0
> Start of program headers: 64 (bytes into file)
> Start of section headers: 15480 (bytes into file)
> Flags: 0x0
> Size of this header: 64 (bytes)
> Size of program headers: 56 (bytes)
> Number of program headers: 6
> Size of section headers: 64 (bytes)
> Number of section headers: 29
> Section header string table index: 26
>
> Section Headers:
> [Nr] Name Type Address Offset
> Size EntSize Flags Link Info Align
> [ 0] NULL 0000000000000000 00000000
> 0000000000000000 0000000000000000 0 0 0
>
> [ Lines removed for clarity ]
>
> Dynamic section at offset 0x36f8 contains 27 entries:
> Tag Type Name/Value
> 0x0000000000000001 (NEEDED) Shared library: [libaprutil-1.so.0]
> 0x0000000000000001 (NEEDED) Shared library: [libexpat.so.1]
> 0x0000000000000001 (NEEDED) Shared library: [libapr-1.so.0]
> 0x0000000000000001 (NEEDED) Shared library: [librt.so.1]
> 0x0000000000000001 (NEEDED) Shared library: [libcrypt.so.1]
> 0x0000000000000001 (NEEDED) Shared library: [libpthread.so.0]
> 0x0000000000000001 (NEEDED) Shared library: [libc.so.6]
> 0x000000000000000f (RPATH) Library rpath: [/usr/local/httpd-2.4.12/lib:/lib/../lib64]
>
> [ Lines removed for clarity ]
>
> Relocation section '.rela.plt' at offset 0x1300 contains 61 entries:
> Offset Info Type Sym. Value Sym. Name + Addend
> 000000203930 000200000007 R_X86_64_JUMP_SLO 0000000000000000 Perl_mg_get + 0
> 000000203938 000300000007 R_X86_64_JUMP_SLO 0000000000000000 Perl_sv_setiv + 0
> 000000203940 000400000007 R_X86_64_JUMP_SLO 0000000000000000 Perl_sv_bless + 0
> 000000203948 000500000007 R_X86_64_JUMP_SLO 0000000000000000 apr_strerror + 0
> 000000203950 000600000007 R_X86_64_JUMP_SLO 0000000000000000 Perl_require_pv + 0
> 000000203958 000700000007 R_X86_64_JUMP_SLO 0000000000000000 Perl_warn + 0
> 000000203960 000800000007 R_X86_64_JUMP_SLO 0000000000000000 PerlIO_printf + 0
> 000000203968 000900000007 R_X86_64_JUMP_SLO 0000000000000000 ap_strchr + 0
>
> [ Lines removed for clarity ]
>
> Symbol table '.dynsym' contains 86 entries:
> Num: Value Size Type Bind Vis Ndx Name
> 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND
> 1: 00000000000018b8 0 SECTION LOCAL DEFAULT 9
> 2: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND Perl_mg_get
> 3: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND Perl_sv_setiv
> 4: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND Perl_sv_bless
> 5: 0000000000000000 0 FUNC GLOBAL DEFAULT UND apr_strerror
> 6: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND Perl_require_pv
> 7: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND Perl_warn
> 8: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND PerlIO_printf
> 9: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND ap_strchr
>
>
> [ Lines removed for clarity ]
>
> Symbol table '.symtab' contains 143 entries:
> Num: Value Size Type Bind Vis Ndx Name
> 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND
> 1: 0000000000000190 0 SECTION LOCAL DEFAULT 1
>
> [ Lines removed for clarity ]
>
> 69: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND ap_strchr
>
>
> [ Lines removed for clarity ]
>
> --------------------------------------------------------------------------
>
> It seems that ap_strchr is not defined anywhere outside httpd, and not in
> any of the shared libs. This seems to create the problem when building
> a module with mod_perl or outside the mod_perl source.
>
> I find a somewhat related change by Stas in the past in the Changes file:
>
> bug reports generating code: [Stas]
> - add (apr|apu)-config linking info
> - show the full path to the config file used to get the data for the
> report
>
> The APR and APR::* family of modules can now be used without having
> to load mod_perl.so. On *nix, this is done by compiling the needed
> functions from the appropriate sources used to build mod_perl.so
> into APR.so, and then arranging for APR::* to 'use APR ()'. On Win32,
> a static library of needed functions is built, and APR/APR::*
> then link into this library [Stas, Joe Schaefer, Randy Kobes]
>
>
> I hope this helps resolve this issue in any way.
>
>
>
>
>
> Regards,
>
> Jie
>
> * Jie Gao <J.Gao@sydney.edu.au> wrote:
>
>> Date: Sun, 1 Mar 2015 17:30:45 +1100
>> From: Jie Gao <J.Gao@sydney.edu.au>
>> To: "modperl@perl.apache.org" <modperl@perl.apache.org>, mod_perl Dev
>> <dev@perl.apache.org>
>> Subject: Trunk: APR.so won't load
>> User-Agent: Mutt/1.5.21 (2010-09-15)
>>
>> I have got the source code from the trunk, "make test" mostly passed except for
>> a threading issue, but I installed it anyway.
>>
>> Tried to load a test module, but it fails with the following error:
>>
>> # Error: Can't load '/usr/local/lib/perl5/site_perl/5.20.2/x86_64-linux-thread-multi/auto/APR/APR.so' for module APR: /usr/local/lib/perl5/site_perl/5.20.2/x86_64-linux-thread-multi/auto/APR/APR.so: undefined symbol: ap_strchr at /usr/local/lib/perl5/5.20.2/x86_64-linux-thread-multi/DynaLoader.pm line 193.
>> # at /usr/local/lib/perl5/site_perl/5.20.2/x86_64-linux-thread-multi/APR/Table.pm line 23.
>>
>> The following test module loads OK, but fails if I uncomment any of the "use APR::*" lines:
>>
>> #-------------------------------------------------------------------------
>>
>> package mytest::mytestmodule;
>>
>> use 5.010001;
>> use strict;
>> use warnings;
>> use Carp;
>> $SIG{__DIE__} = \&Carp::confess;
>>
>> use mod_perl2;
>> use Apache2::Connection();
>> use Apache2::RequestRec();
>> use Apache2::SubRequest();
>> use Apache2::Access();
>> use Apache2::RequestUtil();
>> use Apache2::Response();
>> use Apache2::Log();
>> use Apache2::Util();
>> use Apache2::Const ("-compile", qw(:common :methods :satisfy :auth MODE_READBYTES));
>> use Apache2::URI();
>> use Apache2::Filter ();
>> #use APR::Const ("-compile", qw(:common SUCCESS BLOCK_READ));
>> use IO::Socket qw(SOCK_STREAM);
>> use Data::Dumper;
>> use AnyDBM_File ();
>> #use APR::Brigade ();
>> #use APR::Bucket ();
>> #use APR::Base64 ();
>> #use APR::Table ();
>> #use APR::URI ();
>> use URI::Escape::XS qw/uri_escape uri_unescape/;
>> #use Apache2::MPM();
>>
>> our $VERSION = '1.0.1';
>>
>> 1;
>> __END__
>>
>> #-------------------------------------------------------------------------
>>
>> -------------8<---------- Start Bug Report ------------8<----------
>> 1. Problem Description:
>>
>> [DESCRIBE THE PROBLEM HERE]
>>
>> 2. Used Components and their Configuration:
>>
>> *** mod_perl version 2.000009
>>
>> *** using /usr/local/src/mod_perl-2.0/lib/Apache2/BuildConfig.pm
>>
>> *** Makefile.PL options:
>> MP_APR_CONFIG => /usr/local/httpd-2.4.12/bin/apr-1-config
>> MP_APR_LIB => aprext
>> MP_APXS => /usr/local/httpd-2.4.12/bin/apxs
>> MP_COMPAT_1X => 1
>> MP_GENERATE_XS => 1
>> MP_LIBNAME => mod_perl
>> MP_USE_DSO => 1
>>
>>
>> *** /usr/local/httpd-2.4.12/bin/httpd -V
>> Server version: Apache/2.4.12 (Unix)
>> Server built: Feb 27 2015 20:05:23
>> Server's Module Magic Number: 20120211:41
>> Server loaded: APR 1.5.1, APR-UTIL 1.5.4
>> Compiled using: APR 1.5.1, APR-UTIL 1.5.4
>> Architecture: 64-bit
>> Server MPM: worker
>> threaded: yes (fixed thread count)
>> forked: yes (variable process count)
>> Server compiled with....
>> -D APR_HAS_SENDFILE
>> -D APR_HAS_MMAP
>> -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
>> -D APR_USE_SYSVSEM_SERIALIZE
>> -D APR_USE_PTHREAD_SERIALIZE
>> -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
>> -D APR_HAS_OTHER_CHILD
>> -D AP_HAVE_RELIABLE_PIPED_LOGS
>> -D DYNAMIC_MODULE_LIMIT=256
>> -D HTTPD_ROOT="/usr/local/httpd-2.4.12"
>> -D SUEXEC_BIN="/usr/local/httpd-2.4.12/bin/suexec"
>>
>>
>> *** /usr/bin/ldd /usr/local/httpd-2.4.12/bin/httpd
>> linux-vdso.so.1 => (0x00007fffcefff000)
>> libpcre.so.0 => /lib64/libpcre.so.0 (0x000000327f400000)
>> libaprutil-1.so.0 => /usr/local/httpd-2.4.12/lib/libaprutil-1.so.0 (0x00007f3ba864c000)
>> libexpat.so.1 => /lib64/libexpat.so.1 (0x0000003281c00000)
>> libapr-1.so.0 => /usr/local/httpd-2.4.12/lib/libapr-1.so.0 (0x00007f3ba8417000)
>> librt.so.1 => /lib64/librt.so.1 (0x000000327dc00000)
>> libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00000036c2400000)
>> libpthread.so.0 => /lib64/libpthread.so.0 (0x000000327d400000)
>> libc.so.6 => /lib64/libc.so.6 (0x000000327d000000)
>> /lib64/ld-linux-x86-64.so.2 (0x000000327cc00000)
>> libfreebl3.so => /lib64/libfreebl3.so (0x00000036c2800000)
>> libdl.so.2 => /lib64/libdl.so.2 (0x000000327d800000)
>>
>>
>> *** (apr|apu)-config linking info
>>
>> -L/usr/local/httpd-2.4.12/lib -laprutil-1 -lexpat
>> -L/usr/local/httpd-2.4.12/lib -lapr-1 -lrt -lcrypt -lpthread
>>
>>
>>
>> *** /usr/local/bin/perl -V
>> Summary of my perl5 (revision 5 version 20 subversion 2) configuration:
>>
>> Platform:
>> osname=linux, osvers=2.6.32-504.8.1.el6.x86_64, archname=x86_64-linux-thread-multi
>> uname='linux xxx.xxx.xxx.xx 2.6.32-504.8.1.el6.x86_64 #1 smp fri dec 19 12:09:25 est 2014 x86_64 x86_64 x86_64 gnulinux '
>> config_args='-Dusethreads -Dprefix=/usr/local -des -A ccflags=-fPIC'
>> hint=recommended, useposix=true, d_sigaction=define
>> useithreads=define, usemultiplicity=define
>> use64bitint=define, use64bitall=define, uselongdouble=undef
>> usemymalloc=n, bincompat5005=undef
>> Compiler:
>> cc='cc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -fPIC -fwrapv -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64',
>> optimize='-O2',
>> cppflags='-D_REENTRANT -D_GNU_SOURCE -fPIC -fwrapv -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include'
>> ccversion='', gccversion='4.4.7 20120313 (Red Hat 4.4.7-11)', gccosandvers=''
>> intsize=4, longsize=8, ptrsize=8, doublesize=8, byteorder=12345678
>> d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16
>> ivtype='long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8
>> alignbytes=8, prototype=define
>> Linker and Libraries:
>> ld='cc', ldflags =' -fstack-protector -L/usr/local/lib'
>> libpth=/usr/local/lib /usr/lib /lib/../lib64 /usr/lib/../lib64 /lib /lib64 /usr/lib64 /usr/local/lib64
>> libs=-lnsl -lgdbm -ldb -ldl -lm -lcrypt -lutil -lpthread -lc
>> perllibs=-lnsl -ldl -lm -lcrypt -lutil -lpthread -lc
>> libc=libc-2.12.so, so=so, useshrplib=false, libperl=libperl.a
>> gnulibc_version='2.12'
>> Dynamic Linking:
>> dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E'
>> cccdlflags='-fPIC', lddlflags='-shared -O2 -L/usr/local/lib -fstack-protector'
>>
>>
>> Characteristics of this binary (from libperl):
>> Compile-time options: HAS_TIMES MULTIPLICITY PERLIO_LAYERS
>> PERL_DONT_CREATE_GVSV
>> PERL_HASH_FUNC_ONE_AT_A_TIME_HARD
>> PERL_IMPLICIT_CONTEXT PERL_MALLOC_WRAP
>> PERL_NEW_COPY_ON_WRITE PERL_PRESERVE_IVUV
>> USE_64_BIT_ALL USE_64_BIT_INT USE_ITHREADS
>> USE_LARGE_FILES USE_LOCALE USE_LOCALE_COLLATE
>> USE_LOCALE_CTYPE USE_LOCALE_NUMERIC USE_PERLIO
>> USE_PERL_ATOF USE_REENTRANT_API
>> Built under linux
>> Compiled at Feb 25 2015 15:58:55
>> %ENV:
>> PERL_LWP_USE_HTTP_10="1"
>> @INC:
>> /usr/local/lib/perl5/site_perl/5.20.2/x86_64-linux-thread-multi
>> /usr/local/lib/perl5/site_perl/5.20.2
>> /usr/local/lib/perl5/5.20.2/x86_64-linux-thread-multi
>> /usr/local/lib/perl5/5.20.2
>> /usr/local/lib/perl5/site_perl/5.18.2
>> /usr/local/lib/perl5/site_perl/5.18.0
>> /usr/local/lib/perl5/site_perl
>> .
>>
>> *** Packages of interest status:
>>
>> Apache2 : -
>> Apache2::Request : -
>> CGI : 3.65
>> ExtUtils::MakeMaker: 6.98
>> LWP : 5.837
>> mod_perl : -
>> mod_perl2 : 2.000009
>>
>>
>> 3. This is the core dump trace: (if you get a core dump):
>>
>> [CORE TRACE COMES HERE]
>>
>> This report was generated by bin/mp2bug on Sun Mar 1 06:21:21 2015 GMT.
>>
>> -------------8<---------- End Bug Report --------------8<----------
>>
>> # ls -al /usr/local/httpd-2.4.12/lib/
>> total 4108
>> drwxr-xr-x. 4 root root 4096 Feb 27 20:07 .
>> drwxr-xr-x. 15 root root 4096 Feb 27 20:07 ..
>> -rw-r--r--. 1 root root 9262 Feb 27 20:07 apr.exp
>> drwxr-xr-x. 2 root root 4096 Feb 27 20:07 apr-util-1
>> -rw-r--r--. 1 root root 5272 Feb 27 20:07 aprutil.exp
>> -rw-r--r--. 1 root root 1685642 Feb 27 20:07 libapr-1.a
>> -rwxr-xr-x. 1 root root 969 Feb 27 20:07 libapr-1.la
>> lrwxrwxrwx. 1 root root 17 Feb 27 20:07 libapr-1.so -> libapr-1.so.0.5.1
>> lrwxrwxrwx. 1 root root 17 Feb 27 20:07 libapr-1.so.0 -> libapr-1.so.0.5.1
>> -rwxr-xr-x. 1 root root 858051 Feb 27 20:07 libapr-1.so.0.5.1
>> -rw-r--r--. 1 root root 1022024 Feb 27 20:07 libaprutil-1.a
>> -rwxr-xr-x. 1 root root 1045 Feb 27 20:07 libaprutil-1.la
>> lrwxrwxrwx. 1 root root 21 Feb 27 20:07 libaprutil-1.so -> libaprutil-1.so.0.5.4
>> lrwxrwxrwx. 1 root root 21 Feb 27 20:07 libaprutil-1.so.0 -> libaprutil-1.so.0.5.4
>> -rwxr-xr-x. 1 root root 589222 Feb 27 20:07 libaprutil-1.so.0.5.4
>> drwxr-xr-x. 2 root root 4096 Feb 27 20:07 pkgconfig
>>
>>
>>
>>
>>
>>
>> Regards,
>>
>>
>> Jie.
>>
>>
>>
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@perl.apache.org
For additional commands, e-mail: dev-help@perl.apache.org
I cannot reproduce the problem here on Windows. Your example module
loads up fine with all the "use APR" lines uncommented.
The build system (and the means by which APR::* should be loadable
without mod_perl.so being loaded) is different on Windows, but I did
notice this:
ap_strchr seems to only be used in xs\Apache2\Module\Apache2__Module.h
but when I run Module.c through the preprocessor I find that ap_strchr
gets changed to strchr, and the latter is simply imported from the C
run-time library.
I guess that's down to this code in httpd.h:
#ifdef AP_DEBUG
#undef strchr
# define strchr(s, c) ap_strchr(s,c)
#undef strrchr
# define strrchr(s, c) ap_strrchr(s,c)
#undef strstr
# define strstr(s, c) ap_strstr(s,c)
#else
/** use this instead of strchr */
# define ap_strchr(s, c) strchr(s, c)
/** use this instead of strchr */
# define ap_strchr_c(s, c) strchr(s, c)
/** use this instead of strrchr */
# define ap_strrchr(s, c) strrchr(s, c)
/** use this instead of strrchr */
# define ap_strrchr_c(s, c) strrchr(s, c)
/** use this instead of strrstr*/
# define ap_strstr(s, c) strstr(s, c)
/** use this instead of strrstr*/
# define ap_strstr_c(s, c) strstr(s, c)
#endif
so presumably I do not have AP_DEBUG defined for my build (even though
it was a debug build).
It looks like AP_DEBUG should not be defined, even in maintainer mode,
according to an old Changes entry:
remove -DAP_HAVE_DESIGNATED_INITIALIZER and -DAP_DEBUG from
MP_MAINTAINER mode to avoid collisions [Joe Orton]
but do you somehow have AP_DEBUG defined somewhere, which causes the
replacement of ap_strchr with strchr to not happen for you?
On 27 March 2015 at 09:14, Jie Gao <J.Gao@sydney.edu.au> wrote:
> Hi All
>
> I had some more time looking into this, and here's some info I can provide.
>
> --------------------------------------------------------------------------
>
> # readelf -a /usr/local/lib/perl5/site_perl/5.20.2/x86_64-linux-thread-multi/auto/APR/APR.so
> ELF Header:
> Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
> Class: ELF64
> Data: 2's complement, little endian
> Version: 1 (current)
> OS/ABI: UNIX - System V
> ABI Version: 0
> Type: DYN (Shared object file)
> Machine: Advanced Micro Devices X86-64
> Version: 0x1
> Entry point address: 0x1cb0
> Start of program headers: 64 (bytes into file)
> Start of section headers: 15480 (bytes into file)
> Flags: 0x0
> Size of this header: 64 (bytes)
> Size of program headers: 56 (bytes)
> Number of program headers: 6
> Size of section headers: 64 (bytes)
> Number of section headers: 29
> Section header string table index: 26
>
> Section Headers:
> [Nr] Name Type Address Offset
> Size EntSize Flags Link Info Align
> [ 0] NULL 0000000000000000 00000000
> 0000000000000000 0000000000000000 0 0 0
>
> [ Lines removed for clarity ]
>
> Dynamic section at offset 0x36f8 contains 27 entries:
> Tag Type Name/Value
> 0x0000000000000001 (NEEDED) Shared library: [libaprutil-1.so.0]
> 0x0000000000000001 (NEEDED) Shared library: [libexpat.so.1]
> 0x0000000000000001 (NEEDED) Shared library: [libapr-1.so.0]
> 0x0000000000000001 (NEEDED) Shared library: [librt.so.1]
> 0x0000000000000001 (NEEDED) Shared library: [libcrypt.so.1]
> 0x0000000000000001 (NEEDED) Shared library: [libpthread.so.0]
> 0x0000000000000001 (NEEDED) Shared library: [libc.so.6]
> 0x000000000000000f (RPATH) Library rpath: [/usr/local/httpd-2.4.12/lib:/lib/../lib64]
>
> [ Lines removed for clarity ]
>
> Relocation section '.rela.plt' at offset 0x1300 contains 61 entries:
> Offset Info Type Sym. Value Sym. Name + Addend
> 000000203930 000200000007 R_X86_64_JUMP_SLO 0000000000000000 Perl_mg_get + 0
> 000000203938 000300000007 R_X86_64_JUMP_SLO 0000000000000000 Perl_sv_setiv + 0
> 000000203940 000400000007 R_X86_64_JUMP_SLO 0000000000000000 Perl_sv_bless + 0
> 000000203948 000500000007 R_X86_64_JUMP_SLO 0000000000000000 apr_strerror + 0
> 000000203950 000600000007 R_X86_64_JUMP_SLO 0000000000000000 Perl_require_pv + 0
> 000000203958 000700000007 R_X86_64_JUMP_SLO 0000000000000000 Perl_warn + 0
> 000000203960 000800000007 R_X86_64_JUMP_SLO 0000000000000000 PerlIO_printf + 0
> 000000203968 000900000007 R_X86_64_JUMP_SLO 0000000000000000 ap_strchr + 0
>
> [ Lines removed for clarity ]
>
> Symbol table '.dynsym' contains 86 entries:
> Num: Value Size Type Bind Vis Ndx Name
> 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND
> 1: 00000000000018b8 0 SECTION LOCAL DEFAULT 9
> 2: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND Perl_mg_get
> 3: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND Perl_sv_setiv
> 4: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND Perl_sv_bless
> 5: 0000000000000000 0 FUNC GLOBAL DEFAULT UND apr_strerror
> 6: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND Perl_require_pv
> 7: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND Perl_warn
> 8: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND PerlIO_printf
> 9: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND ap_strchr
>
>
> [ Lines removed for clarity ]
>
> Symbol table '.symtab' contains 143 entries:
> Num: Value Size Type Bind Vis Ndx Name
> 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND
> 1: 0000000000000190 0 SECTION LOCAL DEFAULT 1
>
> [ Lines removed for clarity ]
>
> 69: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND ap_strchr
>
>
> [ Lines removed for clarity ]
>
> --------------------------------------------------------------------------
>
> It seems that ap_strchr is not defined anywhere outside httpd, and not in
> any of the shared libs. This seems to create the problem when building
> a module with mod_perl or outside the mod_perl source.
>
> I find a somewhat related change by Stas in the past in the Changes file:
>
> bug reports generating code: [Stas]
> - add (apr|apu)-config linking info
> - show the full path to the config file used to get the data for the
> report
>
> The APR and APR::* family of modules can now be used without having
> to load mod_perl.so. On *nix, this is done by compiling the needed
> functions from the appropriate sources used to build mod_perl.so
> into APR.so, and then arranging for APR::* to 'use APR ()'. On Win32,
> a static library of needed functions is built, and APR/APR::*
> then link into this library [Stas, Joe Schaefer, Randy Kobes]
>
>
> I hope this helps resolve this issue in any way.
>
>
>
>
>
> Regards,
>
> Jie
>
> * Jie Gao <J.Gao@sydney.edu.au> wrote:
>
>> Date: Sun, 1 Mar 2015 17:30:45 +1100
>> From: Jie Gao <J.Gao@sydney.edu.au>
>> To: "modperl@perl.apache.org" <modperl@perl.apache.org>, mod_perl Dev
>> <dev@perl.apache.org>
>> Subject: Trunk: APR.so won't load
>> User-Agent: Mutt/1.5.21 (2010-09-15)
>>
>> I have got the source code from the trunk, "make test" mostly passed except for
>> a threading issue, but I installed it anyway.
>>
>> Tried to load a test module, but it fails with the following error:
>>
>> # Error: Can't load '/usr/local/lib/perl5/site_perl/5.20.2/x86_64-linux-thread-multi/auto/APR/APR.so' for module APR: /usr/local/lib/perl5/site_perl/5.20.2/x86_64-linux-thread-multi/auto/APR/APR.so: undefined symbol: ap_strchr at /usr/local/lib/perl5/5.20.2/x86_64-linux-thread-multi/DynaLoader.pm line 193.
>> # at /usr/local/lib/perl5/site_perl/5.20.2/x86_64-linux-thread-multi/APR/Table.pm line 23.
>>
>> The following test module loads OK, but fails if I uncomment any of the "use APR::*" lines:
>>
>> #-------------------------------------------------------------------------
>>
>> package mytest::mytestmodule;
>>
>> use 5.010001;
>> use strict;
>> use warnings;
>> use Carp;
>> $SIG{__DIE__} = \&Carp::confess;
>>
>> use mod_perl2;
>> use Apache2::Connection();
>> use Apache2::RequestRec();
>> use Apache2::SubRequest();
>> use Apache2::Access();
>> use Apache2::RequestUtil();
>> use Apache2::Response();
>> use Apache2::Log();
>> use Apache2::Util();
>> use Apache2::Const ("-compile", qw(:common :methods :satisfy :auth MODE_READBYTES));
>> use Apache2::URI();
>> use Apache2::Filter ();
>> #use APR::Const ("-compile", qw(:common SUCCESS BLOCK_READ));
>> use IO::Socket qw(SOCK_STREAM);
>> use Data::Dumper;
>> use AnyDBM_File ();
>> #use APR::Brigade ();
>> #use APR::Bucket ();
>> #use APR::Base64 ();
>> #use APR::Table ();
>> #use APR::URI ();
>> use URI::Escape::XS qw/uri_escape uri_unescape/;
>> #use Apache2::MPM();
>>
>> our $VERSION = '1.0.1';
>>
>> 1;
>> __END__
>>
>> #-------------------------------------------------------------------------
>>
>> -------------8<---------- Start Bug Report ------------8<----------
>> 1. Problem Description:
>>
>> [DESCRIBE THE PROBLEM HERE]
>>
>> 2. Used Components and their Configuration:
>>
>> *** mod_perl version 2.000009
>>
>> *** using /usr/local/src/mod_perl-2.0/lib/Apache2/BuildConfig.pm
>>
>> *** Makefile.PL options:
>> MP_APR_CONFIG => /usr/local/httpd-2.4.12/bin/apr-1-config
>> MP_APR_LIB => aprext
>> MP_APXS => /usr/local/httpd-2.4.12/bin/apxs
>> MP_COMPAT_1X => 1
>> MP_GENERATE_XS => 1
>> MP_LIBNAME => mod_perl
>> MP_USE_DSO => 1
>>
>>
>> *** /usr/local/httpd-2.4.12/bin/httpd -V
>> Server version: Apache/2.4.12 (Unix)
>> Server built: Feb 27 2015 20:05:23
>> Server's Module Magic Number: 20120211:41
>> Server loaded: APR 1.5.1, APR-UTIL 1.5.4
>> Compiled using: APR 1.5.1, APR-UTIL 1.5.4
>> Architecture: 64-bit
>> Server MPM: worker
>> threaded: yes (fixed thread count)
>> forked: yes (variable process count)
>> Server compiled with....
>> -D APR_HAS_SENDFILE
>> -D APR_HAS_MMAP
>> -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
>> -D APR_USE_SYSVSEM_SERIALIZE
>> -D APR_USE_PTHREAD_SERIALIZE
>> -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
>> -D APR_HAS_OTHER_CHILD
>> -D AP_HAVE_RELIABLE_PIPED_LOGS
>> -D DYNAMIC_MODULE_LIMIT=256
>> -D HTTPD_ROOT="/usr/local/httpd-2.4.12"
>> -D SUEXEC_BIN="/usr/local/httpd-2.4.12/bin/suexec"
>>
>>
>> *** /usr/bin/ldd /usr/local/httpd-2.4.12/bin/httpd
>> linux-vdso.so.1 => (0x00007fffcefff000)
>> libpcre.so.0 => /lib64/libpcre.so.0 (0x000000327f400000)
>> libaprutil-1.so.0 => /usr/local/httpd-2.4.12/lib/libaprutil-1.so.0 (0x00007f3ba864c000)
>> libexpat.so.1 => /lib64/libexpat.so.1 (0x0000003281c00000)
>> libapr-1.so.0 => /usr/local/httpd-2.4.12/lib/libapr-1.so.0 (0x00007f3ba8417000)
>> librt.so.1 => /lib64/librt.so.1 (0x000000327dc00000)
>> libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00000036c2400000)
>> libpthread.so.0 => /lib64/libpthread.so.0 (0x000000327d400000)
>> libc.so.6 => /lib64/libc.so.6 (0x000000327d000000)
>> /lib64/ld-linux-x86-64.so.2 (0x000000327cc00000)
>> libfreebl3.so => /lib64/libfreebl3.so (0x00000036c2800000)
>> libdl.so.2 => /lib64/libdl.so.2 (0x000000327d800000)
>>
>>
>> *** (apr|apu)-config linking info
>>
>> -L/usr/local/httpd-2.4.12/lib -laprutil-1 -lexpat
>> -L/usr/local/httpd-2.4.12/lib -lapr-1 -lrt -lcrypt -lpthread
>>
>>
>>
>> *** /usr/local/bin/perl -V
>> Summary of my perl5 (revision 5 version 20 subversion 2) configuration:
>>
>> Platform:
>> osname=linux, osvers=2.6.32-504.8.1.el6.x86_64, archname=x86_64-linux-thread-multi
>> uname='linux xxx.xxx.xxx.xx 2.6.32-504.8.1.el6.x86_64 #1 smp fri dec 19 12:09:25 est 2014 x86_64 x86_64 x86_64 gnulinux '
>> config_args='-Dusethreads -Dprefix=/usr/local -des -A ccflags=-fPIC'
>> hint=recommended, useposix=true, d_sigaction=define
>> useithreads=define, usemultiplicity=define
>> use64bitint=define, use64bitall=define, uselongdouble=undef
>> usemymalloc=n, bincompat5005=undef
>> Compiler:
>> cc='cc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -fPIC -fwrapv -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64',
>> optimize='-O2',
>> cppflags='-D_REENTRANT -D_GNU_SOURCE -fPIC -fwrapv -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include'
>> ccversion='', gccversion='4.4.7 20120313 (Red Hat 4.4.7-11)', gccosandvers=''
>> intsize=4, longsize=8, ptrsize=8, doublesize=8, byteorder=12345678
>> d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16
>> ivtype='long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8
>> alignbytes=8, prototype=define
>> Linker and Libraries:
>> ld='cc', ldflags =' -fstack-protector -L/usr/local/lib'
>> libpth=/usr/local/lib /usr/lib /lib/../lib64 /usr/lib/../lib64 /lib /lib64 /usr/lib64 /usr/local/lib64
>> libs=-lnsl -lgdbm -ldb -ldl -lm -lcrypt -lutil -lpthread -lc
>> perllibs=-lnsl -ldl -lm -lcrypt -lutil -lpthread -lc
>> libc=libc-2.12.so, so=so, useshrplib=false, libperl=libperl.a
>> gnulibc_version='2.12'
>> Dynamic Linking:
>> dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E'
>> cccdlflags='-fPIC', lddlflags='-shared -O2 -L/usr/local/lib -fstack-protector'
>>
>>
>> Characteristics of this binary (from libperl):
>> Compile-time options: HAS_TIMES MULTIPLICITY PERLIO_LAYERS
>> PERL_DONT_CREATE_GVSV
>> PERL_HASH_FUNC_ONE_AT_A_TIME_HARD
>> PERL_IMPLICIT_CONTEXT PERL_MALLOC_WRAP
>> PERL_NEW_COPY_ON_WRITE PERL_PRESERVE_IVUV
>> USE_64_BIT_ALL USE_64_BIT_INT USE_ITHREADS
>> USE_LARGE_FILES USE_LOCALE USE_LOCALE_COLLATE
>> USE_LOCALE_CTYPE USE_LOCALE_NUMERIC USE_PERLIO
>> USE_PERL_ATOF USE_REENTRANT_API
>> Built under linux
>> Compiled at Feb 25 2015 15:58:55
>> %ENV:
>> PERL_LWP_USE_HTTP_10="1"
>> @INC:
>> /usr/local/lib/perl5/site_perl/5.20.2/x86_64-linux-thread-multi
>> /usr/local/lib/perl5/site_perl/5.20.2
>> /usr/local/lib/perl5/5.20.2/x86_64-linux-thread-multi
>> /usr/local/lib/perl5/5.20.2
>> /usr/local/lib/perl5/site_perl/5.18.2
>> /usr/local/lib/perl5/site_perl/5.18.0
>> /usr/local/lib/perl5/site_perl
>> .
>>
>> *** Packages of interest status:
>>
>> Apache2 : -
>> Apache2::Request : -
>> CGI : 3.65
>> ExtUtils::MakeMaker: 6.98
>> LWP : 5.837
>> mod_perl : -
>> mod_perl2 : 2.000009
>>
>>
>> 3. This is the core dump trace: (if you get a core dump):
>>
>> [CORE TRACE COMES HERE]
>>
>> This report was generated by bin/mp2bug on Sun Mar 1 06:21:21 2015 GMT.
>>
>> -------------8<---------- End Bug Report --------------8<----------
>>
>> # ls -al /usr/local/httpd-2.4.12/lib/
>> total 4108
>> drwxr-xr-x. 4 root root 4096 Feb 27 20:07 .
>> drwxr-xr-x. 15 root root 4096 Feb 27 20:07 ..
>> -rw-r--r--. 1 root root 9262 Feb 27 20:07 apr.exp
>> drwxr-xr-x. 2 root root 4096 Feb 27 20:07 apr-util-1
>> -rw-r--r--. 1 root root 5272 Feb 27 20:07 aprutil.exp
>> -rw-r--r--. 1 root root 1685642 Feb 27 20:07 libapr-1.a
>> -rwxr-xr-x. 1 root root 969 Feb 27 20:07 libapr-1.la
>> lrwxrwxrwx. 1 root root 17 Feb 27 20:07 libapr-1.so -> libapr-1.so.0.5.1
>> lrwxrwxrwx. 1 root root 17 Feb 27 20:07 libapr-1.so.0 -> libapr-1.so.0.5.1
>> -rwxr-xr-x. 1 root root 858051 Feb 27 20:07 libapr-1.so.0.5.1
>> -rw-r--r--. 1 root root 1022024 Feb 27 20:07 libaprutil-1.a
>> -rwxr-xr-x. 1 root root 1045 Feb 27 20:07 libaprutil-1.la
>> lrwxrwxrwx. 1 root root 21 Feb 27 20:07 libaprutil-1.so -> libaprutil-1.so.0.5.4
>> lrwxrwxrwx. 1 root root 21 Feb 27 20:07 libaprutil-1.so.0 -> libaprutil-1.so.0.5.4
>> -rwxr-xr-x. 1 root root 589222 Feb 27 20:07 libaprutil-1.so.0.5.4
>> drwxr-xr-x. 2 root root 4096 Feb 27 20:07 pkgconfig
>>
>>
>>
>>
>>
>>
>> Regards,
>>
>>
>> Jie.
>>
>>
>>
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@perl.apache.org
For additional commands, e-mail: dev-help@perl.apache.org