3

他の人のプロジェクトをコンパイルしようとしています。私はすでにそれを Windows でビルドできました。つまり、コンパイル可能ですが、今は Linux で苦労しています。具体的には、1 つのファイルでエラーが発生しています。

#ifndef _LOGGER_H_2011_27_02_ 
#define _LOGGER_H_2011_27_02_ 

//  logger
#include <log4cplus/logger.h>
#include <iomanip>

#define LOG_TRACE(logger, msg) LOG4CPLUS_TRACE(logger, \
    "[@" << std::hex << (size_t)this << "] " << std::dec << msg);

#define LOG_DEBUG(logger, msg) LOG4CPLUS_DEBUG(logger, \
    "[@" << std::hex << (size_t)this << "] " << std::dec << msg);

// I erased repetitive declarations for WARN, FATAl etc...

コード自体は私には意味がありません。表現"[@" <<は一種のワイルドですが、問題ではありません。コンパイルする必要があります。私が得るエラーは次のとおりです。

source/repository/../query/../loader/../common/logger.h:30:64: error: ‘LOG4CPLUS_ERROR’ was not declared in this scope
     "[@" << std::hex << (size_t)this << "] " << std::dec << msg);

また:

source/repository/Repository.cpp: In member function ‘void W3TTServer::Repository::cleanupSessions()’:
source/repository/Repository.cpp:82:64: error: invalid operands of types ‘const char [33]’ and ‘long int’ to binary ‘operator<<’
  LOG4CPLUS_TRACE(logger, "Cleaning up inactive sessions..." << sessionCleanupTimer);

詳細モードを有効にしましたが、冗談です。実際には、インクルード ディレクトリのリストしか取得できません。

#include <...> search starts here:
 /usr/local/ssl/include
 /usr/include/c++/4.9
 /usr/include/x86_64-linux-gnu/c++/4.9
 /usr/include/c++/4.9/backward
 /usr/lib/gcc/x86_64-linux-gnu/4.9/include
 /usr/local/include
 /usr/lib/gcc/x86_64-linux-gnu/4.9/include-fixed
 /usr/include/x86_64-linux-gnu
 /usr/include
End of search list.

log4cplus ライブラリがインストールされて/usr/include/log4cplus/おり、ヘッダー ファイルが見つからないというエラーはなかったので、問題なく<log4cplus/logger.h>読み込まれたと思います。これを確認するには、含まれているファイルのリストを取得して、場所が正しいかどうかを確認する必要があります。

GCC に含まれるファイルのリストを取得するにはどうすればよいですか?

4

1 に答える 1

3

-H(プリプロセッサ)オプションをに渡しますg++。通常、Makefileたとえば追加することで追加します

CXXFLAGS += -H

あなたの適切な場所でMakefile

make CXX='g++ -H -Wall'端末で試してみてください。

端末に入力する場合は、その直後にg++追加します。-H

于 2015-09-29T08:59:53.210 に答える