httpd-modules-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From <oh...@cox.net>
Subject Re: How to compiling/link/use Apache module that uses shared library?
Date Thu, 21 Jun 2012 20:36:47 GMT

---- Joe Lewis <joe@joe-lewis.com> wrote: 
> On 6/21/12 1:40 PM, ohaya@cox.net wrote:
> > ---- ohaya@cox.net wrote:
> >> ---- Sorin Manolache<sorinm@gmail.com>  wrote:
> >>> On 2012-06-21 19:47, ohaya@cox.net wrote:
> >>>
> >>>> I've tried using "-l" pointing directly to the .so, libobaccess.so,
but when I do that, it says it can't find the .so:
> >>>>
> >>>> [root@apachemodule build-mod_headers]# ./compile-mod-headers.sh
> >>>> /apps/httpd2222/build/libtool --silent --mode=compile gcc -prefer-pic
  -DLINUX=2 -D_REENTRANT -D_GNU_SOURCE -g -O2 -pthread -I/apps/httpd2222/include  -I/apps/httpd2222/include
  -I/apps/httpd2222/include   -c -o mod_headers.lo mod_headers.c&&  touch mod_headers.slo
> >>>> /apps/httpd2222/build/libtool --silent --mode=link gcc -o mod_headers.la
 -l/apps/netpoint/AccessServerSDK/oblix/lib/libobaccess.so -rpath /apps/httpd2222/modules
-module -avoid-version    mod_headers.lo
> >>>> /usr/bin/ld: cannot find -l/apps/netpoint/AccessServerSDK/oblix/lib/libobaccess.so
> >>>> collect2: ld returned 1 exit status
> >>>> apxs:Error: Command failed with rc=65536
> >>> Try -lobaccess
> >>>
> >>> S
> >>
> >> Sorin,
> >>
> >> I was able to get Apache to start, kind of, using the apxs I posted, but adding
LoadFile directives to the Apache httpd.conf, to load libobaccess.so.
> >>
> >> Now, when I run "apachectl -t", it says "OK", but when I try to actually start
Apache, I get a segfault (see below).  The thing is, I have a bunch of printfs in almost every
function in mod_headers.c, so I could see what functions are being called, and it looks like
the segfault is occurring even before it gets to any of the code parts that I've tweaked (vs.
original mod_headers.c):
> >>
> >>
> >> [root@apachemodule build-mod_headers]# /apps/httpd2222/bin/apachectl -k start
-X
> >> mod_headers-jl V0.09 - start calling OAM API
> >> In register_hooks
> >> In create_headers_dir_config
> >> In create_headers_dir_config
> >> In header_cmd
> >> In header_inout_cmd
> >> In parse_format_tag
> >> In parse_misc_string
> >> In create_headers_dir_config
> >> In header_cmd
> >> In header_inout_cmd
> >> In parse_format_tag
> >> In parse_misc_string
> >> In header_post_config
> >>
> >> I tried running strace, and got (the ending of the strace):
> >>
> >>
> >> In register_hooks
> >> In create_headers_dir_config
> >> In create_headers_dir_config
> >> In header_cmd
> >> In header_inout_cmd
> >> In parse_format_tag
> >> In parse_misc_string
> >> In create_headers_dir_config
> >> In header_cmd
> >> In header_inout_cmd
> >> In parse_format_tag
> >> In parse_misc_string
> >> In header_post_config
> >> rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
> >> rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
> >> rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
> >> rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
> >> rt_sigaction(SIGINT, {0x432cc0, [], SA_RESTORER, 0x351432e300}, {SIG_DFL}, 8)
= 0
> >> wait4(-1, [{WIFSIGNALED(s)&&  WTERMSIG(s) == SIGSEGV}], 0, NULL) = 11711
> >> fstat(2, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 5), ...}) = 0
> >> mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2a983bf000
> >> open("/usr/share/locale/locale.alias", O_RDONLY) = 3
> >> fstat(3, {st_mode=S_IFREG|0644, st_size=2528, ...}) = 0
> >> mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2a983c0000
> >> read(3, "# Locale name alias data base.\n#"..., 4096) = 2528
> >> read(3, "", 4096)                       = 0
> >> close(3)                                = 0
> >> munmap(0x2a983c0000, 4096)              = 0
> >> open("/usr/share/locale/en_US.UTF-8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT
(No such file or directory)
> >> open("/usr/share/locale/en_US.utf8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT
(No such file or directory)
> >> open("/usr/share/locale/en_US/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No
such file or directory)
> >> open("/usr/share/locale/en.UTF-8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT
(No such file or directory)
> >> open("/usr/share/locale/en.utf8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT
(No such file or directory)
> >> open("/usr/share/locale/en/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such
file or directory)
> >> write(2, "/apps/httpd2222/bin/apachectl: l"..., 83/apps/httpd2222/bin/apachectl:
line 78: 11711 Segmentation fault      $HTTPD $ARGV
> >> ) = 83
> >> rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
> >> --- SIGCHLD (Child exited) @ 0 (0) ---
> >> wait4(-1, 0x7fbfffed64, WNOHANG, NULL)  = -1 ECHILD (No child processes)
> >> rt_sigreturn(0xffffffffffffffff)        = 0
> >> rt_sigaction(SIGINT, {SIG_DFL}, {0x432cc0, [], SA_RESTORER, 0x351432e300}, 8)
= 0
> >> rt_sigprocmask(SIG_BLOCK, NULL, [], 8)  = 0
> >> read(255, "\nexit $ERROR\n\n", 3420)    = 14
> >> rt_sigprocmask(SIG_BLOCK, NULL, [], 8)  = 0
> >> rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
> >> exit_group(139)                         = ?
> >>
> >>
> >> I'll try to do the apxs with -lobccess and post back...
> >>
> >> Jim
> >
> > Hi,
> >
> > It looks like just including the .so in the apxs command is enough to cause the
segfault, even if I remove all references to the functions in the .so from my module code.
> >
> > Is there something else I need to do when using my module that uses "external" .so
files?
> >
> > Jim
> 
> You may need to ensure the .so is in your ldconfig paths.  If you do an 
> "ldconfig -p" and grep for your module, it should show up.  
> Additionally, on your compile, split your -l/-L into two parts :
> 
> -L/apps/netpoint/AccessServerSDK/oblix/lib/ -llibobaccess
> 
> See if that behaves any differently.
> 
> Joe
> --
> http://www.silverhawk.net/


Hi,

ldconfig -p doesn't list either "header" or "obaccess":


[root@apachemodule build-mod_headers]# ldconfig -p | grep obaccess
[root@apachemodule build-mod_headers]#
[root@apachemodule build-mod_headers]#
[root@apachemodule build-mod_headers]# ldconfig -p | grep header
[root@apachemodule build-mod_headers]#
[root@apachemodule build-mod_headers]#


FYI, I've been using both -L and -l together as you mentioned.

Jim

Mime
View raw message