Ошибка связывания личной библиотеки, которая использует log4cplus

У меня странная проблема при попытке связать простой код, который использует личную библиотеку, которая использует lib4cplus.

Файл с основным кодом очень прост и не использует log4cplus. Я использую только lib4cplus в библиотеке. Библиотека компилируется правильно, но когда я связываю основной файл с библиотекой, она выдает такие ошибки (логгеры var не определены в архитектуре x86_64)

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

Ошибки появляются, когда я хочу определить свои личные логгеры vars (ficheroLogger и errorFicheroLogger).

Это код в файле cpp моей библиотеки.

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.");
}

0

Решение

Это не похоже на проблему log4cplus. Попробуйте переставить командную строку:

g++ -o Class leer.o libfichero.a -llog4cplus -lz -lm
0

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

Других решений пока нет …

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