Ошибка компиляции Log4cpp - PullRequest
2 голосов
/ 17 ноября 2011

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

#include <stdio.h>
#include <log4cpp/Category.hh>
#include <log4cpp/FileAppender.hh>
#include <log4cpp/SimpleLayout.hh>

#define LOGFILE "./test.log"

int main()
{
    /*Setting up Appender, layout and Category*/
    log4cpp::Appender *appender = new log4cpp::FileAppender("FileAppender",LOGFILE);
    log4cpp::Layout *layout = new log4cpp::SimpleLayout();
    log4cpp::Category& category = log4cpp::Category::getInstance("Category");

    appender->setLayout(layout);
    category.setAppender(appender);
    category.setPriority(log4cpp::Priority::INFO);

    /*The actual logging*/
    category.info("This is for tracing the flow");
    category.notice("This is to notify certain events");
    category.warn("This is to generate certain warnings");
}

$ g ++ -I / usr / local / include / log4cpp -L / usr / local / lib / -llog4cpp -lpthread log.cc

Компилируется.Но тогда я получаю следующую ошибку.

./a.out: error while loading shared libraries: liblog4cpp.so.4: cannot open shared object file: No such file or directory

Я вижу liblog4cpp.so.4 в папке / usr / local / lib.Как я могу решить это?

Ответы [ 2 ]

1 голос
/ 17 ноября 2011

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

  1. Сообщать в каждом конкретном случае: LD_LIBRARY_PATH=/usr/local/lib ./aout

  2. Жесткий код пути к исполняемому файлу: Добавьте -Wl,-r,/usr/local/lib к команде компоновщика.

  3. Возиться с окружающей средой (думаю, вы просто export LD_LIBRARY_PATH).

(Правильная среда сборки (например, cmake) обычно автоматически добавляет опцию компоновщика из (2), если вы устанавливаете библиотеки в нестандартном месте.)

Всегда проверяйте ldd ./a.out, если у вас проблемы с загрузкой, чтобы проверить, какие библиотеки отсутствуют.

0 голосов
/ 06 ноября 2014

У меня была похожая ошибка с другой программой.

Но добавление этой строки в файл .bashrc в домашнем каталоге решило эту проблему.(Активируется и сохраняется через повторное ведение журнала)

export LD_LIBRARY_PATH=path/to/log4cpp/lib:$LD_LIBRARY_PATH
...