Configuring nginx with g++

Decimus Phostle decimusphostle at gmail.com
Fri Nov 12 02:03:59 MSK 2010


Piotr:

> This patch should fix your problems:
> http://builds.frickle.com/nginx/patches/nginx__clang_Werror_Wall_fixes.patch

Thanks! That did fix the configure issue. But it threw up a bunch of
warnings/errors in the nginx code. I guess I will take Maxim's
suggestion of opting for just compiling the handler via g++.

Maxim:

> E.g. the following will compile nginx with test cpp module:
>
> ./configure --with-ld-opt="-lstdc++" --with-cpp_test_module && make

Thanks that worked! I had a sort of code-organization/build follow-up
question: as I write this module which has a bunch of source
files/external dependencies, I was wondering if there would be a more
modular way to organize code, say one package or directory per logical
unit (and compile them independently). As opposed to having all the
source in one directory and then have them all listed in
NGX_ADDON_SRCS in 'my_module/config'. Please let me know.

Thanks,
DP

2010/11/10 Maxim Dounin <mdounin at mdounin.ru>:
> 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
>
> _______________________________________________
> nginx mailing list
> nginx at nginx.org
> http://nginx.org/mailman/listinfo/nginx
>



More information about the nginx mailing list