Ubuntu 16.04へのrefBoxのインストール(libmongocxx編)
RoboCup Logistics LeagueのためのRobotino3の再構築を進めていたら,refBox のmakeでエラーがでました….とりあえず,その部分への対処メモ.
今までmongodb なしで進められていたはずなので,たぶんコメントアウトで対応できるのはず という方針でチェックします.
まず,最初にエラーが出るのはrcll-refbox/src/refbox/refbox.h ですが,
#ifdef HAVE_MONGODB include <mongocxx/database.hpp> include <mongocxx/client.hpp> class MongoDBLogProtobuf; #endif
HAVE_MONGODB が定義されていないはずなのに,#ifdef が反応している模様.
これは,mongodb.mk でmongoDB が存在しない場合の書き方が悪い感じです.
ifneq ($(PKGCONFIG),) ifeq ($(HAVE_CPP11),1) HAVE_MONGODB = $(if $(shell $(PKGCONFIG) --exists --atleast-version=3 'libmongocxx'; echo $${?/1/}),1,0) CFLAGS_MONGODB = $(shell $(PKGCONFIG) --cflags 'libmongocxx') -DHAVE_MONGODB LDFLAGS_MONGODB = $(shell $(PKGCONFIG) --libs 'libmongocxx') endif endif
なんかインデントがおかしい気がしますが,それはおいておいて,
HAVE_MONGODB の結果の有無にかかわらず,CFLAGS_MONGODBとLDFLAGS_MONGODB を用意してしまっているので,CFLAGS に -DHAVE_MONGODB が追加されてしまっている模様.
とりあえず,以下のように条件分岐を追加して,回避します.
ifneq ($(PKGCONFIG),) ifeq ($(HAVE_CPP11),1) HAVE_MONGODB = $(if $(shell $(PKGCONFIG) --exists --atleast-version=3 'libmongocxx'; echo $${?/1/}),1,0) ifeq ($(HAVE_MONGODB),1) CFLAGS_MONGODB = $(shell $(PKGCONFIG) --cflags 'libmongocxx') -DHAVE_MONGODB LDFLAGS_MONGODB = $(shell $(PKGCONFIG) --libs 'libmongocxx') endif endif endif
次に,rcll-refbox/src/refbox/main.cpp の40行目でエラーができます.
#include <mongocxx/instance.hpp>
何もチェックせずにinclude しちゃってますがな.
ここは,#ifdef を入れるべきですね.
#ifdef HAVE_MONGODB #include <mongocxx/instance.hpp> #endif
よし,これでmake が通りました.
やったね.
コメントを残す