Назад | Перейти на главную страницу

Компиляция nginx с помощью nginx-gridfs, получение ошибок mongo-c-driver во время make

Я пытаюсь скомпилировать nginx (версия 1.0.11) с поддержкой gridfs (nginx-gridfs версия 0.8) на Ubuntu 11.10 (gcc версии 4.6), используя модуль nginx здесь:

https://github.com/mdirolf/nginx-gridfs

Описанные там инструкции по установке просты:

* Clone the nginx-gridfs repository (`git clone https://github.com/mdirolf/nginx-gridfs`)
* Check out the mongo-c-driver submodule (`git submodule init` then `git submodule update`)
* Download and unpack the nginx source (from `http://nginx.org/download/nginx-1.0.11.tar.gz`)
* Run `./configure` with `--add-module=/path/to/nginx-gridfs/repository`
* `make` and `sudo make install`

Эти шаги сработали для меня в последний раз, когда я настраивал nginx-gridfs на машине (около четырех месяцев назад на Ubuntu 10.04, с gcc 4.5 и nginx версии 1.0.5), но теперь (при новой установке Ubuntu) я получаю ошибка. В ./configure работает нормально, но make не работает с:

/path/to/nginx-gridfs/mongo-c-driver/src/mongo.c: In function 'mongo_count':
/path/to/nginx-gridfs/mongo-c-driver/src/mongo.c:939:5: error: missing initializer [-Werror=missing-field-initializers]
/path/to/nginx-gridfs/mongo-c-driver/src/mongo.c:939:5: error: (near initialization for 'out.dataSize') [-Werror=missing-field-initializers]
/path/to/nginx-gridfs/mongo-c-driver/src/mongo.c: In function 'mongo_simple_int_command':
/path/to/nginx-gridfs/mongo-c-driver/src/mongo.c:981:5: error: missing initializer [-Werror=missing-field-initializers]
/path/to/nginx-gridfs/mongo-c-driver/src/mongo.c:981:5: error: (near initialization for 'out.dataSize') [-Werror=missing-field-initializers]
/path/to/nginx-gridfs/mongo-c-driver/src/mongo.c: In function 'mongo_simple_str_command':
/path/to/nginx-gridfs/mongo-c-driver/src/mongo.c:1013:5: error: missing initializer [-Werror=missing-field-initializers]
/path/to/nginx-gridfs/mongo-c-driver/src/mongo.c:1013:5: error: (near initialization for 'out.dataSize') [-Werror=missing-field-initializers]
/path/to/nginx-gridfs/mongo-c-driver/src/mongo.c: In function 'mongo_cmd_get_error_helper':
/path/to/nginx-gridfs/mongo-c-driver/src/mongo.c:1055:5: error: missing initializer [-Werror=missing-field-initializers]
/path/to/nginx-gridfs/mongo-c-driver/src/mongo.c:1055:5: error: (near initialization for 'out.dataSize') [-Werror=missing-field-initializers]
/path/to/nginx-gridfs/mongo-c-driver/src/mongo.c: In function 'mongo_cmd_ismaster':
/path/to/nginx-gridfs/mongo-c-driver/src/mongo.c:1098:5: error: missing initializer [-Werror=missing-field-initializers]
/path/to/nginx-gridfs/mongo-c-driver/src/mongo.c:1098:5: error: (near initialization for 'out.dataSize') [-Werror=missing-field-initializers]
cc1: all warnings being treated as errors
make[1]: *** [objs/addon/src/mongo.o] Error 1

Есть идеи, почему это не удалось?

В cc1: all warnings being treated as errors заставляет меня поверить, что я могу добавить -Wno-error к CFLAGS чтобы он не рассматривал предупреждения как ошибки, чтобы избежать этой проблемы. Но меня беспокоит, что здесь не зря включена функция «рассматривать предупреждения как ошибки» и что ее отключение сделает компиляцию успешной только на первый взгляд, но на самом деле не сработает.

Кто-нибудь знает, что здесь происходит?

Использование ваших методов игнорирования предупреждений заставило компиляцию работать, но я действительно получал отказ при подключении к базе данных с ошибками пользователя / пароля при использовании. Что сработало для меня, так это комбинация сборки mongo с нуля для обеспечения сборки nginx с новыми библиотеками: http://pastebin.com/tMsL2eC9

Но на самом деле этого было недостаточно. Мне также пришлось специально проверить драйвер mongo c v0.3.1 в подмодуле nginx-gridfs. То есть nginx gridfs v0.8. V0.3.1 драйвер mongo c, а свежая сборка mongo - это ссылки из env, указанного в этой ссылке. Затем я построил nginx 1.0.11 без ошибок, и он сработал.