2

私は大きな問題を抱えています、

ZeroMQ と C を使用するコードと、MongoDB と C を使用する別のコードがあり、このコードをマージする必要がありますが、このコマンドを使用してコンパイルしようとすると:

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

私はこのエラースタックを手に入れました:

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

Mongo-C-Driver をインストールしたとき:

logger.c ファイルで、MongoDB-C-api と ZeroMQ-C-api の間の競合を解決するために make STD=c89 を使用しました。エラー スタックが要求する変数を定義しましたが、機能しません。 .

4

3 に答える 3

2

--std=c99 を使用する必要があります

c89 も有効な古い標準であるため、エラーが発生しています。

于 2012-06-11T13:03:19.290 に答える
0

使用する必要はありません--std=c99

C++ (または c++11) 用にコンパイルしている場合は、インクルードの前にこれを定義するだけです。

#define MONGO_HAVE_STDINT
#include "mongo.h"

#include <stdint.h>これは、システムに存在し、適切に定義するmongo cドライバーに通知しますint64_t

または、次を使用できます。

#define MONGO_HAVE_UNISTD
#include "mongo.h"

#include <unistd.h>代わりに使用している場合。

詳細については、https://github.com/mongodb/mongo-c-driver/blob/master/src/bson.h#L52を参照してください。

于 2013-11-13T23:39:37.340 に答える
-1

エラーは次のとおりです。

/usr/local/include/bson.h:63:2: エラー: #error c99 でコンパイルするか、MONGO_HAVE_STDINT、MONGO_HAVE_UNISTD、MONGO_USE__INT64、または MONGO_USE_LONG_INT を定義する必要があります。

そのため、ヘッダー ファイル bson.h の 52 行目から 66 行目までをコメントします。

typedef long long int のように見える何か..

于 2013-04-23T14:45:25.300 に答える