boost::filesystem::directory_iterator() 出现段错误 Sementation fault
这是一个复盘帖,将遇到的boost的相关问题复盘一下, 先贴上我的代码部分:
if (boost::filesystem::is_directory(mypath))
{boost::filesystem::directory_iterator end_iter;std::cout << "mypath is a directory! " << mypath.string() << std::endl;boost::filesystem::directory_iterator iter(mypath);std::cout << "goto for loop " << std::endl;for (; iter != end_iter; ++iter){std::cout << "current filename: " << boost::filesystem::is_regular_file(iter->status()) << std::endl;if (boost::filesystem::is_regular_file(iter->status()) &&((iter->path().extension().string() == ".png") || (iter->path().extension().string() == ".bmp"))){filenames.push_back(iter->path().string());}if (boost::filesystem::is_directory(iter->status())){get_filenames(iter->path().string(), filenames);}}
}
想要用boost循环读取文件夹下的图片, 代码测试过没有问题,但是在另一台电脑上出现段错误, 提示是在boost::filesystem::directory_iterator iter(mypath) 这一行, 原本想着会不会是boost版本的问题, 但是看到了这个issue:
Sementation fault on boost iterator 里面作者提到自己的g++版本切换到6.2之后文件就不能用了, 利用
g++ --version
gcc --version
查看了一下自己的版本,发现是g++7, 而原本可以执行这个文件的电脑上g++版本是5.6, 于是安装g++5, 并且切换版本:
#安装
sudo apt-get install g++-5 gcc-5
#把gcc5的优先级设置地高一点
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 100
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-5 100
#查看当前的可用版本
sudo update-alternatives --config gcc
查看版本之后看到当前已经默认使用了gcc5
仅仅这样还是不行,切换版本之后删除原先的boost, 再重新编译安装;
sudo rm -rf /usr/local/include/boost
sudo rm -rf /usr/local/lib/libboost*
在安装boost之前,可以添加prefix, 指定一下安装目录:
gedit bootstrap.sh
将 原来的 PREFIX=/usr/local/ 修改为PREFIX=/usr/local/ boost_1_66, 这样再次执行 后boost就被安装到该目录下;
sudo ./bootstrap.sh
sudo ./b2 install
安装完成,查看boost,结果如下:
lib和头文件都在这里了;
接下来将之前出问题的编译程序清除后,重新编译, 这里附上在cmakelists中包含boost的方法:
include_directories("/usr/local/boost_1_66/include/")
link_directories("/usr/local/boost_1_66/lib/")
add_executable(exe_name main.cpp)
target_link_libraries(exe_name-lboost_filesystem-lboost_system)
编译完成后,问题解决;
参考:
Boost卸载旧版本,安装新版本
boost异常
boost::filesystem::directory_iterator() 出现段错误 Sementation fault相关推荐
- boost::filesystem模块实现为错误报告测试用例提供了一个模板
boost::filesystem模块实现为错误报告测试用例提供了一个模板 实现功能 C++实现代码 实现功能 boost::filesystem模块实现为错误报告测试用例提供了一个模板 C++实现代 ...
- linux read函数段错误,linux C++ 莫名奇异的段错误(segmentation fault),无法调用其他函数...
进来在linux下开发C++项目,遇到了非常奇怪的bug. 项目须要多线程实现,在写好代码后,每当执行到线程函数内部,当内部调用其他函数如printf.fopen等时就会提示段错误(segmentat ...
- QT安装段错误segmentation fault
QT安装段错误segmentation fault 如需转载请标明出处:http://blog.csdn.net/itas109 QQ技术交流群:129518033 文章目录 QT安装段错误segme ...
- C 总线错误 (bus error) - 段错误 (segmentation fault)
C 总线错误 (bus error) - 段错误 (segmentation fault) 两个常见的运行时错误: bus error (core dumped) - 总线错误 (信息已转储) seg ...
- 总结段错误(Segmentation fault)
总结段错误(Segmentation fault) 1)往受到系统保护的内存地址写数据 有些内存是内核占用的或者是其他程序正在使用,为了保证系统正常工作,所以会受到系统的保护,而不能任意访问. 1 # ...
- C/C++编程:linux下的段错误(Segmentation fault)产生的原因及调试方法(经典)
简而言之,产生段错误就是访问了错误的内存段,一般是你没有权限,或者根本就不存在对应的物理内存,尤其常见的是访问0地址. 一 般来说,段错误就是指访问的内存超出了系统所给这个程序的内存空间,通常这个值是 ...
- Ubuntu--(8)段错误Segmentation fault (core dumped)
段错误 指访问的内存超出了系统给这个程序所设定的内存空间,例如访问了不存在的内存地址.访问了系统保护的内存地址.访问了只读的内存地址等等情况,例如: 访问不存在的内存地址 #include<st ...
- 【BUG】ELF文件执行时出现段错误Segmentation fault,解决:使用010编辑器修改ELF文件不可执行段权限
问题:段错误,.eh_frame不可执行. 需求:改执行权限. 工具:010 Editer,我的版本:12.0.1 Windows 10. 工具下载:010编辑器官网下载页. 第一步 查看段的执行权限 ...
- 宋宝华:让Linux的段错误(segmentation fault)不再是一个错误
今天周末,娃儿们配合不闹事,写一篇短小精悍的文章吧,反正文章长了大家也没时间看.今天文章的目标是,如何在进程访问空指针等情况下,产生段错误后,不再退出而是继续运行. 这件事情,对于熔断(meltdow ...
最新文章
- hdu5094(上海邀请赛E) 状态压缩bfs:取钥匙开门到目的地
- Android的Intent你知道多少?
- Java面试题整理,一线互联网公司java面试核心知识点
- 用户体验可视化指南pdf_R中增强可视化的初学者指南
- Git 的安装及配置
- @Resource和@Autowired小笔记
- 关于在nodejs上使用es6特性
- 【C#】1.2 控制台应用程序学习要点
- 计算机it dt ct基础知识,ot是什么意思,什么是CT,IT,DT,OT
- 购买代购的产品算违法吗——看空姐代购被判刑有感
- PHP 计算当前时间是这一年的第几周
- linux 加固检测脚本,Linux系统检测和防护脚本
- Web前端-Ajax-01
- 黑马程序员----swift基础语法!
- [技术发展-28]:信息通信网大全、新的技术形态、信息通信行业高质量发展概览
- 淘宝助理导出CSV文件特殊字段详解
- enumeration value ... not handled in switch
- 【游记】THUSC2021
- mysql中为同一张表取多个别名为某一列取别名
- php实现成语小游戏,scratch3制作成语接龙小游戏图文教程
热门文章
- 动态规划01背包问题入门学习,详细笔记,推荐阅读
- [debug] 令人智熄的调试:忘记加return
- jquery系列教程1-选择器全解
- matlab2c使用c++实现matlab函数系列教程-diag函数
- AttributeError: module 'labelme.utils' has no attribute 'draw_label'
- smooth_l1_loss(y_true, y_pred)
- quartus仿真19:JK触发器序列1001检测器
- MySQL 相关知识细节及解析
- R - 变化plot字形,嵌入字体以pdf
- 网上邻居不能正常访问的处理