гван и монгодб

Я новичок в gwan и в настоящее время пишу простую программу для вставки и выбора данных из MongoDB. После того, как я скомпилировал драйвер Mongo-c и поместил стандартную библиотеку Mongo в /usr/lib/, я обнаружил, что в моей программе в папке gwan/csp есть ошибка:

Linking myprog.c: undefined symbol: mongo_client

Моя программа

#include <mongo.h>
int main(){ 
    ...
    mongo conn[1];
    int status = mongo_client( conn, "192.168.1.115", 27017 );
}

(Программа, которую я закодировал в среде Linux, работает!) ‹- Я имею в виду официальный тестовый код mongodb.

gcc -o output -lmongoc myprog_Linux.c

Может кто-нибудь помочь мне? Спасибо большое :)


person moriya    schedule 11.04.2013    source источник
comment
Вы должны проверить #pragma include «[path]» или #pragma link «[path]modulename[.ext]», как описано в документации.   -  person solisoft    schedule 11.04.2013
comment
Я пробовал #pragma include и #pragma link, но все равно не работает...   -  person moriya    schedule 11.04.2013
comment
Наконец, проблема была решена, так как я включил заголовочный файл !! Спасибо !!!!   -  person moriya    schedule 11.04.2013
comment
@moriya: поскольку вы решили свою проблему, вы можете опубликовать свой ответ ниже, чтобы другие могли извлечь уроки из решения :).   -  person Stennie    schedule 11.04.2013
comment
Я забыл включить файл заголовка после #pragma include и #pragma link , после добавления заголовка #include mongo.h проблема решена !!   -  person moriya    schedule 12.04.2013
comment
Он имеет в виду использовать форму «Опубликовать свой ответ» в конце страницы, а затем отметить его как ответ. Не публикуйте решение в комментариях, так как люди могут его пропустить :)   -  person Nagi    schedule 12.04.2013
comment
@Stennie Я только что добавил образец в ответ ниже;)   -  person solisoft    schedule 23.04.2013


Ответы (2)


Вот небольшой пример для gwan + mongoDB

Во-первых: установите драйвер mongoDB c (https://github.com/mongodb/mongo-c-driver )

$ git clone https://github.com/mongodb/mongo-c-driver.git
$ cd mongo-c-driver
$ scons
$ sudo scons install

Он будет установлен в папку /usr/local, вам нужно будет адаптировать его при необходимости или просто скопировать сгенерированные файлы в /usr/lib и /usr/include/

затем запустите ldconfig от имени пользователя root

$ sudo ldconfig

После установки драйвера mongodb c просто попробуйте этот простой пример:

// ============================================================================
// C servlet sample for the G-WAN Web Application Server (http://trustleap.ch/)
// ----------------------------------------------------------------------------
// mongodb.c: querying mongoDB from G-WAM
// ============================================================================

#pragma link "mongoc"
#pragma link "bson"

#include <mongo.h>
#include <bson.h>
#include "gwan.h" // G-WAN exported functions

int main(int argc, char *argv[])
{
   xbuf_t *reply = get_reply(argv);
   mongo conn[1];
   int status = mongo_client( conn, "localhost", 27017 );

  if( status != MONGO_OK ) {
    switch ( conn->err ) {
      case MONGO_CONN_NO_SOCKET:  printf( "no socket\n" ); return 1;
      case MONGO_CONN_FAIL:       printf( "connection failed\n" ); return 1;
      case MONGO_CONN_NOT_MASTER: printf( "not master\n" ); return 1;
    }
  }

  int i = 0;
  for(i=0; i<100;i++) {
    bson b[1];
    bson_init( b );
    bson_append_new_oid( b, "_id" );
    bson_append_string( b, "name", "Joe" );
    bson_append_int( b, "age", 33 );
    bson_finish( b );
    mongo_insert( conn, "tutorial.people", b, NULL );
    bson_destroy( b );
  }

  xbuf_xcat(reply, "Hello Mongo !! %d %d", status, i);

  return 200;
}
// ============================================================================
// End of Source Code
// ============================================================================

Наслаждаться :)

person solisoft    schedule 22.04.2013

Если вы используете сторонние библиотеки из сценариев G-WAN, вы должны использовать директивы #pragma include "library_include_path" и #pragma link "library_name" (они заменяют make-файл).

Конечно, как обычно в C/C++, заголовок #include должен использоваться для добавления определений, используемых библиотекой.

Это описано в руководстве G-WAN в формате PDF, в для разработчиков, Часто задаваемые вопросы по G-WAN и во многих примерах сервлетов, использующих различные библиотеки (libcurl, libmysql, libsqlite, libcairo, libmagick и т. д.).

person Gil    schedule 13.04.2013