You are viewing a plain text version of this content. The canonical link for it is here.
Posted to modules-dev@httpd.apache.org by Farokh Irani <fa...@mcfsoftware.com> on 2007/07/06 04:29:56 UTC
Possibly OT: g++ 4.0.1 on Mac OS X
I'm trying to link together a couple of .o files into a .so file
using g++. The problem is that even though I have a -o specified, no
file is generated and no error comes up. Any pointers on how to
figure out what might be going on, or even where I could look for
more info, would be appreciated.
This is with g++ 4.0.1 on Mac OS X 10.4.10.
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
Posted by Mike <dy...@gmail.com>.
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.
Re: Debian 4 issue
Posted by Farokh Irani <fa...@mcfsoftware.com>.
>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
I tried that, and as far as I can tell, it makes no difference. nm
still shows the same list of symbols.
--
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
Posted by Ralf Mattes <rm...@seid-online.de>.
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
Posted by Farokh Irani <fa...@mcfsoftware.com>.
>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:
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 */
};
--
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
Posted by Ralf Mattes <rm...@seid-online.de>.
On Sun, 2007-07-15 at 09:51 -0400, Farokh Irani wrote:
> 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:
> 000015e8 A __bss_start
> 000003b0 t call_gmon_start
> 000015e8 b completed.5621
> 000014e8 d __CTOR_END__
> 000014e4 d __CTOR_LIST__
> w __cxa_finalize@@GLIBC_2.1.3
> 00000480 t __do_global_ctors_aux
> 000003e0 t __do_global_dtors_aux
> 000015e0 d __dso_handle
> 000014f0 d __DTOR_END__
> 000014ec d __DTOR_LIST__
> 000014f8 a _DYNAMIC
> 000015e8 A _edata
> 000015ec A _end
> 000004c4 T _fini
> 00000440 t frame_dummy
> 000004e0 r __FRAME_END__
> 000015cc a _GLOBAL_OFFSET_TABLE_
> w __gmon_start__
> 00000475 t __i686.get_pc_thunk.bx
> 00000360 T _init
> 000014f4 d __JCR_END__
> 000014f4 d __JCR_LIST__
> w _Jv_RegisterClasses
> 000015e4 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).
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'?
Cheers, Ralf Mattes
> Thanks.
Debian 4 issue
Posted by Farokh Irani <fa...@mcfsoftware.com>.
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:
000015e8 A __bss_start
000003b0 t call_gmon_start
000015e8 b completed.5621
000014e8 d __CTOR_END__
000014e4 d __CTOR_LIST__
w __cxa_finalize@@GLIBC_2.1.3
00000480 t __do_global_ctors_aux
000003e0 t __do_global_dtors_aux
000015e0 d __dso_handle
000014f0 d __DTOR_END__
000014ec d __DTOR_LIST__
000014f8 a _DYNAMIC
000015e8 A _edata
000015ec A _end
000004c4 T _fini
00000440 t frame_dummy
000004e0 r __FRAME_END__
000015cc a _GLOBAL_OFFSET_TABLE_
w __gmon_start__
00000475 t __i686.get_pc_thunk.bx
00000360 T _init
000014f4 d __JCR_END__
000014f4 d __JCR_LIST__
w _Jv_RegisterClasses
000015e4 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: Possibly OT: g++ 4.0.1 on Mac OS X
Posted by Farokh Irani <fa...@mcfsoftware.com>.
>If you have lots of non Apache specific modules then compile them with
>g++ direct if you want, but then compile Apache specific stuff with:
>
> apxs -S CC=g++ -c mod_foo.c file1.c file2.c object1.o object2.o
I tried this, but I get an error:
ar: no archive members specified
(and that is followed by a list of ar commands).
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: Possibly OT: g++ 4.0.1 on Mac OS X
Posted by Graham Dumpleton <gr...@gmail.com>.
On 07/07/07, Farokh Irani <fa...@mcfsoftware.com> wrote:
> >On 06/07/07, Farokh Irani <fa...@mcfsoftware.com> wrote:
> >>I'm trying to link together a couple of .o files into a .so file
> >>using g++. The problem is that even though I have a -o specified, no
> >>file is generated and no error comes up. Any pointers on how to
> >>figure out what might be going on, or even where I could look for
> >>more info, would be appreciated.
> >>
> >>This is with g++ 4.0.1 on Mac OS X 10.4.10.
> >
> >If you are trying to create an Apache module .so, why aren't you using apxs?
> >
> >You can specify that g++ should be used instead of gcc by saying:
> >
> > apxs -S CC=g++ -c mod_example.c
> >
> >This is much better and more portable than trying to create the .so
> >yourself. This is more so the case on MacOS X as how you build a
> >dynamically loadable module is different to options you would use for
> >other platforms. Also, on MacOS X a dynamically loadable module has to
> >be created in a different way to a shared library, they are not
> >interchangeable.
>
> OK, I'm willing to give that a shot, but how do I use apxs to
> compile/link a multi-file source module? IE Right now I've got a
> small module that has 3 files, but I expect the source tree to grow
> to many more (possibly a hundred or more source files).
Look at the manual page for 'apxs' on your system.
If you have lots of non Apache specific modules then compile them with
g++ direct if you want, but then compile Apache specific stuff with:
apxs -S CC=g++ -c mod_foo.c file1.c file2.c object1.o object2.o
The apxs command can be given code files or existing compiled object
files (I think).
You could also put your non Apache specific files in a library and
link to that library when building the module.
apxs -S CC=g++ -c mod_foo.c file1.c file2.c -lmylibrary
The important bit is using apxs for the compilation of Apache code
files and doing the final link to get the Apache module .so.
Graham
Re: Possibly OT: g++ 4.0.1 on Mac OS X
Posted by Farokh Irani <fa...@mcfsoftware.com>.
>On 06/07/07, Farokh Irani <fa...@mcfsoftware.com> wrote:
>>I'm trying to link together a couple of .o files into a .so file
>>using g++. The problem is that even though I have a -o specified, no
>>file is generated and no error comes up. Any pointers on how to
>>figure out what might be going on, or even where I could look for
>>more info, would be appreciated.
>>
>>This is with g++ 4.0.1 on Mac OS X 10.4.10.
>
>If you are trying to create an Apache module .so, why aren't you using apxs?
>
>You can specify that g++ should be used instead of gcc by saying:
>
> apxs -S CC=g++ -c mod_example.c
>
>This is much better and more portable than trying to create the .so
>yourself. This is more so the case on MacOS X as how you build a
>dynamically loadable module is different to options you would use for
>other platforms. Also, on MacOS X a dynamically loadable module has to
>be created in a different way to a shared library, they are not
>interchangeable.
OK, I'm willing to give that a shot, but how do I use apxs to
compile/link a multi-file source module? IE Right now I've got a
small module that has 3 files, but I expect the source tree to grow
to many more (possibly a hundred or more source files).
--
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: Possibly OT: g++ 4.0.1 on Mac OS X
Posted by Graham Dumpleton <gr...@gmail.com>.
On 06/07/07, Farokh Irani <fa...@mcfsoftware.com> wrote:
> I'm trying to link together a couple of .o files into a .so file
> using g++. The problem is that even though I have a -o specified, no
> file is generated and no error comes up. Any pointers on how to
> figure out what might be going on, or even where I could look for
> more info, would be appreciated.
>
> This is with g++ 4.0.1 on Mac OS X 10.4.10.
If you are trying to create an Apache module .so, why aren't you using apxs?
You can specify that g++ should be used instead of gcc by saying:
apxs -S CC=g++ -c mod_example.c
This is much better and more portable than trying to create the .so
yourself. This is more so the case on MacOS X as how you build a
dynamically loadable module is different to options you would use for
other platforms. Also, on MacOS X a dynamically loadable module has to
be created in a different way to a shared library, they are not
interchangeable.
Graham