C++ 程序使用boostlibs可以很好地编译,但运行时出错 简而言之
C++程序(使用boost库)在Eclipse中编译良好,但在运行时显示“加载共享库时出错:libboost_thread.so.1.46.1:无法打开共享对象文件:没有这样的文件或目录”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线程库。
#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