Debian 4 issue
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
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
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.