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
答案 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