Debian 4 issue

2007-07-15 Thread Farokh Irani
I've set up a Debian 4 machine and I'm trying to compile/install a 
small test module. I'm using APXS2 as follows:


apxs2 -ic -S CC=g++ -n mod_fancy mod_fancy.cpp config.cpp

It compiles, and installs the mod_fancy.so file in /usr/lib/apache2/modules.

But, when I try to get apache to load it, I get an error when apache starts:
apache2: Syntax error on line 185 of /etc/apache2/apache2.conf: Syntax error
  on line 1 of /etc/apache2/mods-enabled/mod_fancy.load: Can't locate API
  module structure `fancy_module' in file
  /usr/lib/apache2/modules/mod_fancy.so:
  /usr/lib/apache2/modules/mod_fancy.so: undefined symbol: fancy_module

Using nm on the .so file, I get the following:
15e8 A __bss_start
03b0 t call_gmon_start
15e8 b completed.5621
14e8 d __CTOR_END__
14e4 d __CTOR_LIST__
 w __cxa_finalize@@GLIBC_2.1.3
0480 t __do_global_ctors_aux
03e0 t __do_global_dtors_aux
15e0 d __dso_handle
14f0 d __DTOR_END__
14ec d __DTOR_LIST__
14f8 a _DYNAMIC
15e8 A _edata
15ec A _end
04c4 T _fini
0440 t frame_dummy
04e0 r __FRAME_END__
15cc a _GLOBAL_OFFSET_TABLE_
 w __gmon_start__
0475 t __i686.get_pc_thunk.bx
0360 T _init
14f4 d __JCR_END__
14f4 d __JCR_LIST__
 w _Jv_RegisterClasses
15e4 d p.5619

Anyone have any ideas why the symbol isn't being exported? I'm using 
gcc version 4.1.2 20061115 (prerelease) (Debian 4.1.1-21).


Thanks.
--

Farokh

MCF Software...simply dependably engineered
Developers of ListSTAR http://www.liststar.com/, MacRADIUS
http://www.macradius.com/, Address List Sorter
http://www.mcfsoftware.com/als/, SimpleText Filter for EIMS
http://www.mcfsoftware.com/stf/ and Auto Reply plug-in for EIMS 
http://www.mcfsoftware.com/ar/.


Re: Debian 4 issue

2007-07-15 Thread Ralf Mattes
On Sun, 2007-07-15 at 10:44 -0400, Farokh Irani wrote:
 No - you are not! You are using g++-4... which is a C++ compiler. Are
 you aware of C++ name mangling? Did you declare your exported symbols
 'extern C'?
 
 Um, yes, already done.
 
 extern C module AP_MODULE_DECLARE_DATA fancy_module;
 
 It's the first line after the includes.
 
 Near the end of the file:

You need to declare the following as C:

extern C {
 module AP_MODULE_DECLARE_DATA fancy_module = {
   STANDARD20_MODULE_STUFF,
   create_dir_mconfig,/* create per-dir config structures*/
   merge_dir_mconfig, /* merge  per-dir config structures*/
   NULL,  /* create per-server config structures */
   NULL,  /* merge  per-server config structures */
   fancy_cmds,/* table of config file commands   */
   fancy_register_hooks   /* register hooks  */
 };
}

HTH RalfD



Re: Debian 4 issue

2007-07-15 Thread Mike
On Sun, Jul 15, 2007 at 05:10:46PM +0200, Ralf Mattes wrote:
 You need to declare the following as C:
He doesn't. It won't change anything.