Configuring nginx with g++

Maxim Dounin mdounin at mdounin.ru
Thu Nov 11 07:11:30 MSK 2010


Hello!

On Wed, Nov 10, 2010 at 09:35:43PM -0500, Decimus Phostle wrote:

[...]

> > While this particular error probably should be fixed (it's as
> > trivial as including stdio.h into test in auto/types/sizeof) - in
> > general using C++ compiler to compile C code isn't going to
> > produce anything good.  These are two different languages.
> 
> Yes. (That and I got a warning about the format/int type). Trivial as
> it may seem to fix, I was wondering if anyone has pointers on how to
> fix it as the file in which the error occurs (objs/autotest.c) is
> auto-generated.

Well, you got pointer.  But as I already said - even when fixed 
you won't see anything good trying to build nginx with g++ set 
as C compiler.

> >> Q2) The above issue was encountered while trying to write a
> >> handler/module in C++. Is there another way I should be approaching
> >> this?
> >
> > Just create source file with appropriate extension and include
> > nginx header files in an extern "C" block, then write C++ code.
> > See src/misc/ngx_cpp_test_module.cpp for an example (really simple
> > one though).
> 
> I did look at this. [Naive question follows: ] However as the
> modules/handlers get compiled/linked along with the server in nginx, I
> was under the assumption that if I need to write a C++ module/handler
> then I must compile nginx with g++ (instead of cc). (As the usual way
> to compile build the server + modules is "./configure
> --add-module=foobar && make && make install"). Am I missing something
> or is there another way to do this? Please let me know.

As it was already pointed out - you don't want to compile nginx 
with g++, as it's written in C, not C++, while gcc invoked as g++ 
will assume .c files are in C++.

What you want is to compile *your module* with C++ compiler.  This 
is easy (even keeping in mind that nginx's build doesn't 
distinguish between source files and always calls ${CC}): gcc will 
recognize your module is in C++ as long as it's named 
appropriately named[1] (e.g. *.cpp as in case of test module).

[1] http://gcc.gnu.org/onlinedocs/gcc-4.5.1/gcc/Invoking-G_002b_002b.html#Invoking-G_002b_002b

The only thing you have to do is to include C++ standard library 
during linking.  This may be done e.g. with --with-ld-opt 
configure argument.

E.g. the following will compile nginx with test cpp module:

./configure --with-ld-opt="-lstdc++" --with-cpp_test_module && make

Maxim Dounin



More information about the nginx mailing list