Проблема в том числе log4cxx

Я относительно новичок в C ++, но я использовал log4j (и это клон Python logging). Поэтому я хочу использовать log4cxx для входа в мой новый проект C ++.

Я установил log4cxx с

brew install log4cxx

Теперь мне нужно включить его в мои исходные файлы. Я пытался, например,

#include "log4cxx/logger.h"
namespace EnsembleClustering {

METISGraphParser::METISGraphParser() {
// logging
log4cxx::LoggerPtr logger(log4cxx::Logger::getLogger("METISGraphParser"));
logger->setLevel(log4cxx::Level::getInfo());
this->logger = logger;
}

}

который, кажется, не включает достаточно, так как это дает мне ошибку компоновщика

13:06:29 **** Incremental Build of configuration Debug for project EnsembleClustering ****
make all
Building file: ../src/METISGraphParser.cpp
Invoking: GCC C++ Compiler
g++ -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/METISGraphParser.d" -MT"src/METISGraphParser.d" -o "src/METISGraphParser.o" "../src/METISGraphParser.cpp"../src/METISGraphParser.cpp: In member function 'virtual void EnsembleClustering::METISGraphParser::connectNode(EnsembleClustering::id, std::vector<unsigned int, std::allocator<unsigned int> >)':
../src/METISGraphParser.cpp:128: warning: unused variable 'deg'
../src/METISGraphParser.cpp: In member function 'virtual EnsembleClustering::Graph EnsembleClustering::METISGraphParser::parse(std::string)':
../src/METISGraphParser.cpp:112: warning: control reaches end of non-void function
Finished building: ../src/METISGraphParser.cpp

Building target: EnsembleClustering
Invoking: MacOS X C++ Linker
g++  -o "EnsembleClustering"  ./src/EdgeScoring.o ./src/EdgeTripleGraphData.o ./src/EnsembleClustering.o ./src/EnsembleClusteringAlgo.o ./src/Graph.o ./src/METISGraphParser.o ./src/Matching.o ./src/Modularity.o
Undefined symbols for architecture x86_64:
"log4cxx::spi::LocationInfo::LocationInfo(char const*, char const*, int)", referenced from:
EnsembleClustering::METISGraphParser::initGraph(int, int)in METISGraphParser.o
"log4cxx::Level::getInfo()", referenced from:
EnsembleClustering::METISGraphParser::METISGraphParser()in METISGraphParser.o
EnsembleClustering::METISGraphParser::METISGraphParser()in METISGraphParser.o
"log4cxx::Level::getDebug()", referenced from:
EnsembleClustering::METISGraphParser::initGraph(int, int)in METISGraphParser.o
"log4cxx::Logger::getLogger(char const*)", referenced from:
EnsembleClustering::METISGraphParser::METISGraphParser()in METISGraphParser.o
EnsembleClustering::METISGraphParser::METISGraphParser()in METISGraphParser.o
"log4cxx::helpers::MessageBuffer::str(std::basic_ostream<char, std::char_traits<char> >&)", referenced from:
EnsembleClustering::METISGraphParser::initGraph(int, int)in METISGraphParser.o
"log4cxx::helpers::MessageBuffer::MessageBuffer()", referenced from:
EnsembleClustering::METISGraphParser::initGraph(int, int)in METISGraphParser.o
"log4cxx::helpers::MessageBuffer::~MessageBuffer()", referenced from:
EnsembleClustering::METISGraphParser::initGraph(int, int)in METISGraphParser.o
"log4cxx::helpers::MessageBuffer::operator<<(char const*)", referenced from:
EnsembleClustering::METISGraphParser::initGraph(int, int)in METISGraphParser.o
"log4cxx::helpers::ObjectPtrBase::exchange(void**, void*)", referenced from:
log4cxx::helpers::ObjectPtrT<log4cxx::Logger>::exchange(log4cxx::Logger const*)in METISGraphParser.o
"log4cxx::helpers::ObjectPtrBase::ObjectPtrBase()", referenced from:
log4cxx::helpers::ObjectPtrT<log4cxx::Logger>::ObjectPtrT()in METISGraphParser.o
"log4cxx::helpers::ObjectPtrBase::~ObjectPtrBase()", referenced from:
log4cxx::helpers::ObjectPtrT<log4cxx::Level>::~ObjectPtrT()in METISGraphParser.o
log4cxx::helpers::ObjectPtrT<log4cxx::Level>::~ObjectPtrT()in METISGraphParser.o
log4cxx::helpers::ObjectPtrT<log4cxx::Logger>::~ObjectPtrT()in METISGraphParser.o
log4cxx::helpers::ObjectPtrT<log4cxx::Logger>::~ObjectPtrT()in METISGraphParser.o
"log4cxx::helpers::CharMessageBuffer::operator<<(int)", referenced from:
EnsembleClustering::METISGraphParser::initGraph(int, int)in METISGraphParser.o
"log4cxx::Logger::isDebugEnabled() const", referenced from:
EnsembleClustering::METISGraphParser::initGraph(int, int)in METISGraphParser.o
"log4cxx::Logger::forcedLog(log4cxx::helpers::ObjectPtrT<log4cxx::Level> const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, log4cxx::spi::LocationInfo const&) const", referenced from:
EnsembleClustering::METISGraphParser::initGraph(int, int)in METISGraphParser.o
"typeinfo for log4cxx::helpers::ObjectPtrBase", referenced from:
typeinfo for log4cxx::helpers::ObjectPtrT<log4cxx::Level>in METISGraphParser.o
typeinfo for log4cxx::helpers::ObjectPtrT<log4cxx::Logger>in METISGraphParser.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
make: *** [EnsembleClustering] Error 1

Что мне нужно включить, чтобы начать работать с log4cxx? Или мне нужно явно указать ссылку на log4cxx, изменив настройки сборки Eclipse? Введение в log4cxx не особенно полезен в этом отношении.

1

Решение

Вот как мне удалось правильно связать log4cxx. Homebrew дает вам подсказку, где он установил библиотеку:

cls ~/ $ brew info log4cxx
log4cxx: stable 0.10.0
http://logging.apache.org/log4cxx/index.html
Depends on: automake, libtool
/usr/local/Cellar/log4cxx/0.10.0 (182 files, 7,3M) *
https://github.com/mxcl/homebrew/commits/master/Library/Formula/log4cxx.rb

Как сказал пользовательский компонент 10, мне нужно добавить -L<dir>а также -l<lib>на линкерную линию, где <dir> является /usr/local/Cellar/log4cxx/0.10.0/lib/а также <lib> это библиотека название (не имя файла) log4cxx,

В Eclipse мне нужно было отредактировать следующие настройки:

введите описание изображения здесь

1

Другие решения

Чтобы сделать это немного проще, вы можете сделать

brew link log4cxx

Он создаст символические ссылки на библиотеки в / usr / local / lib и / usr / local / include, которые обычно находятся в компоновщике по умолчанию / пути поиска include.

Вам все еще нужно будет указать -llog4cxx.

1

По вопросам рекламы [email protected]