Модуль на C++ - возможно?

Igor Sysoev is at rambler-co.ru
Mon Mar 3 16:43:50 MSK 2008


On Mon, Mar 03, 2008 at 03:58:27PM +0300, Sergey Samokhin wrote:

> Скажите пожалуйста, существует ли возможность писать модули к nginx на 
> C++? Например, следующий код не собирается под g++ 4.2.2:
> 
> // ----------------------------------
> #include <ngx_core.h>
> 
> int main()
> {
> ngx_str_t str;
> }
> // ----------------------------------
> 
> ругаясь так:
> 
> // --------------------------------------------
> g++ -o ngx_http_foo_module -I../src/nginx-0.6.26/src/core 
> -I../src/nginx-0.6.26/objs -I../src/nginx-0.6.26/src/os/unix *.c
> In file included from ../src/nginx-0.6.26/src/core/ngx_core.h:57,
> from ngx_http_foo_module.c:2:
> ../src/nginx-0.6.26/src/core/ngx_file.h:66: error: expected 
> unqualified-id before 'delete'
> make: *** [ngx_madbanner] Error 1
> // --------------------------------------------
> 
> Этот же код отлично собирается с помощью gcc.
> 
> Спасибо =)
> 
> nginx 0.6.26
> gcc/g++ 4.2.2

Прилагаемый патч лечит.

Кроме того, все инклуды должны идти после nginx'овских

extern "C" {
  #include <ngx_config.h>
  #include <ngx_core.h>
  #include <ngx_event.h>
  #include <ngx_http.h>
}

иначе на Линуске и Солярисе возможны проблемы с размерностью off_t.


-- 
Игорь Сысоев
http://sysoev.ru
-------------- next part --------------
Index: src/http/modules/ngx_http_dav_module.c
===================================================================
--- src/http/modules/ngx_http_dav_module.c	(revision 1228)
+++ src/http/modules/ngx_http_dav_module.c	(working copy)
@@ -248,7 +248,7 @@
     ext.access = dlcf->access;
     ext.time = -1;
     ext.create_path = dlcf->create_full_put_path;
-    ext.delete = 1;
+    ext.delete_file = 1;
     ext.log = r->connection->log;
 
     if (r->headers_in.date) {
Index: src/core/ngx_file.c
===================================================================
--- src/core/ngx_file.c	(revision 1228)
+++ src/core/ngx_file.c	(working copy)
@@ -554,7 +554,7 @@
 
 failed:
 
-    if (ext->delete) {
+    if (ext->delete_file) {
         if (ngx_delete_file(src->data) == NGX_FILE_ERROR) {
             ngx_log_error(NGX_LOG_CRIT, ext->log, ngx_errno,
                           ngx_delete_file_n " \"%s\" failed", src->data);
Index: src/core/ngx_file.h
===================================================================
--- src/core/ngx_file.h	(revision 1228)
+++ src/core/ngx_file.h	(working copy)
@@ -63,7 +63,7 @@
     ngx_fd_t            fd;
 
     unsigned            create_path:1;
-    unsigned            delete:1;
+    unsigned            delete_file:1;
 
     ngx_log_t          *log;
 } ngx_ext_rename_file_t;


More information about the nginx-ru mailing list