首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >链接使用log4cplus的个人库时出错

链接使用log4cplus的个人库时出错
EN

Stack Overflow用户
提问于 2013-06-03 01:49:53
回答 1查看 558关注 0票数 0

我有一个奇怪的问题,试图链接一个简单的代码,它使用一个使用lib4cplus的个人库。

包含主代码的文件非常简单,而且不使用log4cplus。我只在库中使用lib4cplus。库可以正确编译,但当我将主文件与库链接时,它会出现类似这样的错误(记录器变量没有在架构x86_64中定义)

代码语言:javascript
复制
g++ leer.cpp -c
ar r libfichero.a blowfish.o clase.o
g++ -o Class  leer.o -lm -lz -llog4cplus libfichero.a
Undefined symbols for architecture x86_64:
  "fichero::loggerFichero", referenced from:
      fichero::startLoggers()      in libfichero.a(clase.o)
      fichero::fichero()in libfichero.a(clase.o)
      fichero::fichero()in libfichero.a(clase.o)
  "fichero::errorLoggerFichero", referenced from:
      fichero::startLoggers()      in libfichero.a(clase.o)
      fichero::fichero()in libfichero.a(clase.o)
      fichero::fichero()in libfichero.a(clase.o)
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
make[1]: *** [all] Error 1
make: *** [p21] Error 2

当我想要定义我的私有记录器变量(ficheroLogger和errorFicheroLogger)时,就会出现错误。

这是我的库的cpp文件中的代码。

代码语言:javascript
复制
bool fichero::startLoggers()
{
    // Aquí inico los loggers que voy a usar en la clase.
    loggerFichero = Logger::getInstance(LOG4CPLUS_TEXT("utils"));
    errorLoggerFichero = Logger::getInstance("BigFail");
}


// Método para definir los logs.
bool fichero::initLogFichero()
{
    cout << "Entering LOG Config part..." << endl;
    LogLog::getLogLog()->setInternalDebugging(true);
    Logger root = Logger::getRoot();

    // Load the properties
    PropertyConfigurator::doConfigure("ficheroLog4cplus.properties");

    Logger fileLog = Logger::getInstance(LOG4CPLUS_TEXT("filelogger"));

    // Log with INFO level
    LOG4CPLUS_INFO(fileLog, "Application startup");

    cout << "Exiting the main part()..." << endl;

    // Log with INFO level
    if (fileLog.isEnabledFor(INFO_LOG_LEVEL))
    {
        LOG4CPLUS_WARN(fileLog, "Application shutdown");
    }

    startLoggers();

    return true;
}

// Constructor y Destructor
fichero::fichero()
{
    nomFile = "file.txt";

    delimitador = "";
    hayDelimiatador = false;

    initLogFichero();

    LOG4CPLUS_WARN(loggerFichero, "Inicio normal");
    LOG4CPLUS_WARN(errorLoggerFichero, "Inicio error.");
}
EN

回答 1

Stack Overflow用户

发布于 2013-06-03 14:40:43

这看起来不像是log4cplus的问题。尝试重新排列命令行:

代码语言:javascript
复制
g++ -o Class leer.o libfichero.a -llog4cplus -lz -lm
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16885563

复制
相关文章

相似问题

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