2

コンパイルに失敗している次のコードがあります。

#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 フォルダーに表示されます。どうすればこれを解決できますか?

4

2 に答える 2

1

標準以外の場所からリンクしている場合、ローダーはライブラリを見つけられません。いくつかのオプションがあります:

  1. ケースバイケースで通知します。LD_LIBRARY_PATH=/usr/local/lib ./aout

  2. パスを実行可能ファイルにハードコーディングします:-Wl,-r,/usr/local/libリンカー コマンドに追加します。

  3. 環境をいじります(あなたはただだと思いますexport LD_LIBRARY_PATH)。

(適切なビルド環境 ( などcmake) は通常、ライブラリを非標準の場所に配置する場合、(2) のリンカー オプションを自動的に追加します。)

ldd ./a.out読み込みに問題があるかどうかを常に確認して、どのライブラリが欠落しているかを確認してください。

于 2011-11-17T19:20:58.667 に答える
0

別のプログラムで同様のエラーが発生しました。

しかし、この行をホームディレクトリの .bashrc ファイルに追加すると解決しました。(リログで有効化・持続)

export LD_LIBRARY_PATH=path/to/log4cpp/lib:$LD_LIBRARY_PATH
于 2014-11-06T15:35:45.713 に答える