C++ 程序使用boostlibs可以很好地编译,但运行时出错 简而言之

C++ 程序使用boostlibs可以很好地编译,但运行时出错 简而言之,c++,eclipse,boost,redhat,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,

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();
}

您是否检查了
libboost\u线程.so.1.46.1
是否存在于
LD\u库路径中?

在您的
LD\u library\u路径上复制库,在运行时搜索此路径以查找动态库(so)。

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

我与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

它可能会帮助其他人。

参加聚会有点晚,但整天都在为同样的问题争吵。我最近在我的
$HOME/bin/boost_1_51_0
中本地安装了最新的
boost 1_51_0
。 对我来说,有效的方法是通过将这些行添加到我的
。bash_rc
,导出include和library路径:

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\u 51
添加LIB

LDLIBS += -lm
LDLIBS += -lboost_filesystem
LDLIBS += -lboost_chrono
LDLIBS += -lboost_timer
LDLIBS += -lboost_system

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

我也有同样的问题,
ldconfig
没有解决它

如果您像我一样,使用普通的
bjam
命令安装了boost库,那么很可能您将这些库安装在stage子文件夹中。对我有效的是运行以下程序:

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

您是否尝试在系统上查找libboost_线程.so.1.46.1文件?它在搜索路径中吗?libboost_thread.so.1.46.1在我的系统中,我可以找到它没有问题。它也可以在库目录中使用。您需要对共享库(.so)文件执行任何操作才能使LD_library_PATH看到它们吗?执行echo$LD_library_PATH会给出一个空白响应
LD_library_PATH
是编译器在搜索为链接指定的静态库或共享库时查找的路径集。在环境变量
LD\u library\u path
中,通常只指定路径而不指定库。此错误发生在加载动态库的执行期间。
sudo ldconfig /usr/local/include/boost_1_64_0/stage/lib