首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >包括log4cxx在内的麻烦

包括log4cxx在内的麻烦
EN

Stack Overflow用户
提问于 2012-10-18 19:08:25
回答 2查看 3.8K关注 0票数 1

我对C++比较陌生,但我用过log4j (它是Python的克隆logging)。因此,我想使用log4cxx来登录我的新C++项目。

我安装log4cxx的时候

代码语言:javascript
运行
复制
brew install log4cxx

现在我需要将它包含在我的源文件中。我试过了,例如

代码语言:javascript
运行
复制
#include "log4cxx/logger.h"

namespace EnsembleClustering {

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

}

它似乎没有包含足够的内容,因为这给了我链接器错误

代码语言:javascript
运行
复制
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,我需要包含哪些内容?或者我是否需要通过修改我的Eclipse build设置来显式地链接到log4cxx?在这方面,Introduction to log4cxx并没有特别的帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-18 19:41:19

下面是我是如何正确链接log4cxx的。Homebrew会给你一个提示,它把这个库安装在哪里:

代码语言:javascript
运行
复制
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
EN

Stack Overflow用户

发布于 2013-03-09 10:31:56

要使这稍微简单一点,您可以这样做

代码语言:javascript
运行
复制
brew link log4cxx 

它将创建指向/usr/local/lib和/usr/local/include中的库的符号链接,这两个库通常位于默认的链接器/include搜索路径中。

您仍然需要指定-llog4cxx。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12953220

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档