2012-06-11 5 views
2

je suis avec un grand problème,MongoDB, ZeroMQ et C

j'ai un code à l'aide ZeroMQ et C, et un autre code qui utilise MongoDB et C, maintenant je dois fusionner ces codes, mais lorsque je tente à compiler en utilisant cette commande:

gcc -static -lzmq -o logg logger.c /home/lis/mongo-c-driver/libmongoc.a 

i eu cette pile d'erreurs:

In file included from /usr/local/include/mongo.h:24:0, 
       from write_log.h:13, 
       from get_by_log_code.h:6, 
       from logger.c:23: 
/usr/local/include/bson.h:63:2: error: #error Must compile with c99 or define MONGO_HAVE_STDINT, MONGO_HAVE_UNISTD, MONGO_USE__INT64, or MONGO_USE_LONG_INT. 
In file included from get_by_log_code.h:6:0, 
       from logger.c:23: 
write_log.h: In function ‘write_log’: 
write_log.h:70:2: error: incompatible type for argument 1 of ‘mongo_insert’ 
/usr/local/include/mongo.h:369:18: note: expected ‘struct mongo *’ but argument is of type ‘mongo’ 
write_log.h:70:2: error: too few arguments to function ‘mongo_insert’ 
/usr/local/include/mongo.h:369:18: note: declared here 

Lors de l'installation du mongo-C-conducteur:

J'ai utilisé make STD = c89, pour résoudre le conflit entre, MongoDB-C-api et ZeroMQ-C-api, dans mon fichier logger.c J'ai défini les variables que la pile d'erreur demande, mais elle ne le fait pas travaux.

Répondre

2

Vous devez utiliser --std = c99

C89 est une norme plus valide aussi, ce qui est la raison pour laquelle vous obtenez l'erreur.

-1

l'erreur est:

/usr/local/include/bson.h:63:2: Erreur: #error doit compiler avec C99 ou définir MONGO_HAVE_STDINT, MONGO_HAVE_UNISTD, MONGO_USE__INT64 ou MONGO_USE_LONG_INT.

donc des commentaires dans le fichier en-tête bson.h de line52 à la ligne 66

quelque chose regard aime typedef long int ..

+0

Pouvez-vous préciser votre réponse? Je ne sais pas ce que vous voulez dire "quelque chose ressemble ..." – eykanal

0

Vous ne devez pas utiliser --std=c99

Si vous êtes compilation C++ (ou C++ 11), vous pouvez simplement définir cette avant comprennent:

#define MONGO_HAVE_STDINT 
#include "mongo.h" 

qui indique au pilote mongo c que #include <stdint.h> est présent sur le système et bien définir int64_t

Vous pouvez également utiliser:

#define MONGO_HAVE_UNISTD 
#include "mongo.h" 

si vous utilisez #include <unistd.h> à la place.

Pour plus de détails, voir https://github.com/mongodb/mongo-c-driver/blob/master/src/bson.h#L52