C++ C++;11 Boost 1.65递归目录迭代器给出分段错误

C++ C++;11 Boost 1.65递归目录迭代器给出分段错误,c++,c++11,boost,segmentation-fault,C++,C++11,Boost,Segmentation Fault,我下面的代码一直出现分段错误,我似乎不知道为什么。请帮忙~ 我的目标是读取一个文件夹及其所有子文件夹,找到以扩展名“.txt”结尾的所有文件,因此我使用boost的递归目录迭代器来帮助完成这项任务。这个问题突然出现,因为我的代码上周运行良好 test.cpp: #include <sstream> #include <iostream> #include "/home/dj/boost_1_65_1/boost/filesystem.hpp" using namespac

我下面的代码一直出现分段错误,我似乎不知道为什么。请帮忙~ 我的目标是读取一个文件夹及其所有子文件夹,找到以扩展名“.txt”结尾的所有文件,因此我使用boost的递归目录迭代器来帮助完成这项任务。这个问题突然出现,因为我的代码上周运行良好

test.cpp:

#include <sstream>
#include <iostream>
#include "/home/dj/boost_1_65_1/boost/filesystem.hpp"
using namespace std;
int main()
{
    using namespace boost::filesystem;
    recursive_directory_iterator end;
    for (recursive_directory_iterator it("./"); it != end; ++it)
    {
        std::cout << *it << endl;
    }
    return 0;
}
对于gdb和一些cout,我发现错误来自下面的行

for (recursive_directory_iterator it("./"); it != end; ++it)
不知怎的,当我调用“递归目录迭代器”时,我的系统崩溃了,出现了这个错误

Program received signal SIGSEGV, Segmentation fault.
0x00000000004f1c8b in memcpy ()
即使我将代码缩减为

int main()
{
    using namespace boost::filesystem;
    recursive_directory_iterator it("./");
    return 0;
}

代码很好,样式减少了以下内容:

  • Boost 1.65.1:
  • Boost 1.68.0:
您将获得
ldd a.out

    linux-vdso.so.1 =>  (0x00007fff0bfaf000)
    libboost_system.so.1.67.0 => not found
    libboost_filesystem.so.1.67.0 => not found
    libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f5e8fcb2000)
    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f5e8fa9a000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f5e8f6d0000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f5e8f3c7000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f5e9003e000)
事实上,您可以看到我在系统库目录中没有
libboost_系统.so.1.67.0
libboost_文件系统.so.1.67.0
,而且它找不到它们。启动将失败:

$ ./a.out 
./a.out: error while loading shared libraries: libboost_system.so.1.67.0: cannot open shared object file: No such file or directory
您可以将库路径通知运行时链接器:

LD_LIBRARY_PATH=~/custom/boost_1_67_0/stage/lib ./a.out 

试着回想一下你上次在Boost停止工作时所做的更改。其他版本的Boost如何?@john我保留了一份工作副本,但即使这样也不行Boost.filesystem库现在是标准库的一部分。你有机会使用C++17吗?我不能复制,它对我来说很好。您确定权限没有问题吗?你试过用sudo来运行它吗?
    linux-vdso.so.1 =>  (0x00007fff0bfaf000)
    libboost_system.so.1.67.0 => not found
    libboost_filesystem.so.1.67.0 => not found
    libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f5e8fcb2000)
    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f5e8fa9a000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f5e8f6d0000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f5e8f3c7000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f5e9003e000)
$ ./a.out 
./a.out: error while loading shared libraries: libboost_system.so.1.67.0: cannot open shared object file: No such file or directory
LD_LIBRARY_PATH=~/custom/boost_1_67_0/stage/lib ./a.out