程序使用boost libs编译好,但运行时出错

时间:2011-06-10 08:33:28

标签: c++ eclipse boost redhat

简而言之......

C ++程序(使用boost库)在Eclipse中编译很好,但是“加载共享库时出错:libboost_thread.so.1.46.1:无法打开共享对象文件:没有这样的文件或目录”它在运行时显示


详细

我在C ++上运行一个基本程序来检查我是否可以正确使用boost线程库。

#include <boost/thread/thread.hpp>
#include <iostream>

void hello ()
{
    Std::cout<<”Hello, I am a thread”<<std::endl;
}

int main ()
{
    boost::thread th1(&hello);
    th1.join();
}

代码编译得很好,所以我相信我已经正确安装并设置了boost库(添加目录以包含等)

但是当我尝试运行该程序时,我在consol

中收到以下错误消息
error while loading shared libraries: libboost_thread.so.1.46.1: cannot open shared object file: No such file or directory

5 个答案:

答案 0 :(得分:6)

我和FreeFileSYnc有一个非常相似的问题,编译得很好,但由于libboost线程错误而无法启动:

FreeFileSync: error while loading shared libraries: libboost_thread.so.1.51.0: cannot open shared object file: No such file or directory

为了解决这个问题,我做了:

sudo ldconfig /usr/local/lib

它可以帮助其他人。

答案 1 :(得分:3)

您是否检查libboost_thread.so.1.46.1处是否有LD_LIBRARY_PATH? 在LD_LIBRARY_PATH复制库,在运行时搜索此路径的动态库(如此)。

答案 2 :(得分:1)

boost thread是一个动态库。必须在运行时找到程序才能运行(如Windows中的DLL)。

答案 3 :(得分:1)

派对有点晚了,但整天都遇到了同样的问题。我最近在我的boost 1_51_0本地安装了最新的$HOME/bin/boost_1_51_0。 对我有用的是通过将这些行添加到我的.bash_rc

来导出包含和库路径
export CPP_INCLUDE_PATH=$HOME/bin/boost_1_51_0/include
export LD_LIBRARY_PATH=$HOME/bin/boost_1_51_0/lib:$LD_LIBRARY_PATH

然后将include路径和lib路径添加到Makefile

INCLUDE_BOOST += -I$(HOME)/bin/boost_1_51_0/include
LDLIBS_BOOST  += -L$(HOME)/bin/boost_1_51_0/lib

CPPFLAGS += $(INCLUDE)
CPPFLAGS += $(INCLUDE_BOOST)

然后您可以通过

添加1_51的库
LDLIBS += -lm
LDLIBS += -lboost_filesystem
LDLIBS += -lboost_chrono
LDLIBS += -lboost_timer
LDLIBS += -lboost_system

$(TARGET): $(SRCS)
    $(CXX) $(CPPFLAGS) $(LDLIBS_BOOST) $(SRCS) $(LDLIBS)  $(OPT)  -o $@

答案 4 :(得分:0)

我遇到了同样的问题,ldconfig没有修复它。

如果您像我一样使用普通bjam命令安装了boost库,则可能会将库安装在 stage 子文件夹中。 See this page as a reference。对我有用的是运行以下内容:

sudo ldconfig /usr/local/include/boost_1_64_0/stage/lib