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 が通りました.
やったね.

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*