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