我有以下代码无法编译。
#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
我确实在/ usr / local / lib文件夹中看到了liblog4cpp.so.4
。
我怎么解决这个问题?
答案 0 :(得分:1)
如果您从非标准位置进行链接,则加载程序将找不到该库。您有几种选择:
根据具体情况通知:LD_LIBRARY_PATH=/usr/local/lib ./aout
将路径硬编码到可执行文件中:将-Wl,-r,/usr/local/lib
添加到链接器命令。
摆弄环境(我认为你只是export LD_LIBRARY_PATH
)。
(正确的构建环境(例如cmake
)通常会自动添加(2)中的链接器选项,如果它使您的库位于非标准位置。)
如果您有加载问题,请务必检查ldd ./a.out
以检查哪些库丢失。
答案 1 :(得分:0)
我在另一个程序中遇到了类似的错误。
但是将这一行添加到主目录中的.bashrc文件解决了它。 (通过重新激活激活并持续存在)
export LD_LIBRARY_PATH=path/to/log4cpp/lib:$LD_LIBRARY_PATH