1

私は奇妙な課題に直面しています: 私のスタティック ライブラリは、これらのログ機能なしでビルドして使用できますが、それらを含めると、dove.h を含むコードをコンパイルしてから libdove.a にリンクすることができません。私は元々、すべてのログ関数を dove 名前空間の外に移動し、それらを dove.cpp 内で宣言/定義しましたが、それはうまくいきました。ただし、関数のシグネチャがリークするため、独立したプロジェクトで再利用したいと考えています。

dove.h:

namespace dove {
  /* Many functions and classes */

  void log(const char* msg, int level); 
  void info(const char* msg);                                                                                                 
  void error(const char* msg);
  void debug(const char* msg);
}

鳩.cpp:

void dove::log(const char* msg, int level) {
  if (level <= LOG_LEVEL)
    std::cout << "dove: " << msg << std::endl;
}

void dove::info(const char* msg) { log(msg, LOG_INFO); }
void dove::error(const char* msg) { log(msg, LOG_ERROR); }
void dove::debug(const char* msg) { log(msg, LOG_DEBUG); }

Dove Makefile セクション:

all:                                                                                                                            
  $(CXX) -c $(CFLAGS) $(INC) -o dove.o dove.cpp
  ar rvs libdove.a dove.o      
  ranlib libdove.a

これらはすべて完全に正常にビルドされます。私は libdove.a を取得し、すべてが満足しているようです。ただし、#include "dove.h"別のプロジェクトに行がある場合、dove.h で次のコンパイル エラーが発生します。

make[1]: Entering directory `<omitted>/dove'
g++ -c -g  -Ilibs/rapidxml-1.13 -o dove.o dove.cpp
ar rvs libdove.a dove.o
ar: creating libdove.a
a - dove.o
ranlib libdove.a
make[1]: Leaving directory `<omitted>/dove'
cd <omitted> && make
make[1]: Entering directory `<omitted>'
g++  -g  -c -o build/graph.o src/utils/graph.cpp
g++  -g  -c -o build/util.o src/utils/util.cpp
g++ -g  -I<omitted>/dove -Isrc/utils -c -o build/mps.o src/mps.cpp 
In file included from src/mps.cpp:13:
<omitted>/dove/dove.h:247: error: expected ‘,’ or ‘...’ before string constant
<omitted>/dove/dove.h:250: error: expected ‘,’ or ‘...’ before string constant
make[1]: *** [bin/hybrid] Error 1

これらのエラーは常にログとデバッグで発生します。決して情報とエラーではありません。私はそれらを鳩の名前空間の複数の場所(上、中、分離された宣言、下)に配置しましたが、これら2つは常に不平を言っています。

サブプロジェクトのメイクファイル:

# Contains libdove.a
DOVE_ROOT    ?= $(CURDIR)/../../dove
LIBS         := -L$(DOVE_ROOT) -ldove
INC          := -I$(DOVE_ROOT) -Isrc/utils                                                                                      
CXXFLAGS     += -g  

all: $(util_o)
  $(CXX) $(CXXFLAGS) $(INC) -c -o build/mps.o src/mps.cpp 
  $(CXX) $(CXXFLAGS) -o bin/hybrid build/*.o $(LIBS)
4

1 に答える 1