【问题标题】:Program compiles fine with boost libs, but error when running it程序使用 boost 库编译得很好,但运行时出错
【发布时间】:2011-06-10 08:33:28
【问题描述】:

简而言之...

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 库(添加了目录以包含等)

但是,当我尝试运行该程序时,我在控制台中收到以下错误消息

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

【问题讨论】:

  • 您是否尝试在您的系统上找到 libboost_thread.so.1.46.1 文件?是否在搜索路径中?
  • libboost_thread.so.1.46.1 在我的系统上,我可以发现它没有问题。它也可以在库目录中使用。
  • 您是否需要对共享库 (.so) 文件执行任何操作才能使 LD_LIBRARY_PATH 看到它们?

标签: c++ eclipse boost redhat


【解决方案1】:

我在使用 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

它可能会帮助其他人。

【讨论】:

    【解决方案2】:

    您是否检查过libboost_thread.so.1.46.1 是否存在于LD_LIBRARY_PATH
    将库复制到您的LD_LIBRARY_PATH,运行时在此路径中搜索动态库。

    【讨论】:

    • 执行 echo $LD_LIBRARY_PATH 给出空白响应
    • LD_LIBRARY_PATH 是编译器在搜索指定用于链接的静态或共享库时查找的路径集。通常在环境变量LD_LIBRARY_PATH 中只指定路径而不指定库。此错误发生在执行期间,即加载动态库时。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      聚会有点晚了,但整天都在为同样的问题烦恼。我最近在我的$HOME/bin/boost_1_51_0 本地安装了最新的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
      

      然后将包含路径和库路径添加到您的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 $@
      

      【讨论】:

        【解决方案5】:

        我遇到了同样的问题,ldconfig 没有解决它。

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-02-22
          • 2011-08-29
          • 2021-01-30
          • 2023-03-16
          • 2015-08-21
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多