这是一个复盘帖,将遇到的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相关推荐

  1. boost::filesystem模块实现为错误报告测试用例提供了一个模板

    boost::filesystem模块实现为错误报告测试用例提供了一个模板 实现功能 C++实现代码 实现功能 boost::filesystem模块实现为错误报告测试用例提供了一个模板 C++实现代 ...

  2. linux read函数段错误,linux C++ 莫名奇异的段错误(segmentation fault),无法调用其他函数...

    进来在linux下开发C++项目,遇到了非常奇怪的bug. 项目须要多线程实现,在写好代码后,每当执行到线程函数内部,当内部调用其他函数如printf.fopen等时就会提示段错误(segmentat ...

  3. QT安装段错误segmentation fault

    QT安装段错误segmentation fault 如需转载请标明出处:http://blog.csdn.net/itas109 QQ技术交流群:129518033 文章目录 QT安装段错误segme ...

  4. C 总线错误 (bus error) - 段错误 (segmentation fault)

    C 总线错误 (bus error) - 段错误 (segmentation fault) 两个常见的运行时错误: bus error (core dumped) - 总线错误 (信息已转储) seg ...

  5. 总结段错误(Segmentation fault)

    总结段错误(Segmentation fault) 1)往受到系统保护的内存地址写数据 有些内存是内核占用的或者是其他程序正在使用,为了保证系统正常工作,所以会受到系统的保护,而不能任意访问. 1 # ...

  6. C/C++编程:linux下的段错误(Segmentation fault)产生的原因及调试方法(经典)

    简而言之,产生段错误就是访问了错误的内存段,一般是你没有权限,或者根本就不存在对应的物理内存,尤其常见的是访问0地址. 一 般来说,段错误就是指访问的内存超出了系统所给这个程序的内存空间,通常这个值是 ...

  7. Ubuntu--(8)段错误Segmentation fault (core dumped)

    段错误 指访问的内存超出了系统给这个程序所设定的内存空间,例如访问了不存在的内存地址.访问了系统保护的内存地址.访问了只读的内存地址等等情况,例如: 访问不存在的内存地址 #include<st ...

  8. 【BUG】ELF文件执行时出现段错误Segmentation fault,解决:使用010编辑器修改ELF文件不可执行段权限

    问题:段错误,.eh_frame不可执行. 需求:改执行权限. 工具:010 Editer,我的版本:12.0.1 Windows 10. 工具下载:010编辑器官网下载页. 第一步 查看段的执行权限 ...

  9. 宋宝华:让Linux的段错误(segmentation fault)不再是一个错误

    今天周末,娃儿们配合不闹事,写一篇短小精悍的文章吧,反正文章长了大家也没时间看.今天文章的目标是,如何在进程访问空指针等情况下,产生段错误后,不再退出而是继续运行. 这件事情,对于熔断(meltdow ...

最新文章

  1. hdu5094(上海邀请赛E) 状态压缩bfs:取钥匙开门到目的地
  2. Android的Intent你知道多少?
  3. Java面试题整理,一线互联网公司java面试核心知识点
  4. 用户体验可视化指南pdf_R中增强可视化的初学者指南
  5. Git 的安装及配置
  6. @Resource和@Autowired小笔记
  7. 关于在nodejs上使用es6特性
  8. 【C#】1.2 控制台应用程序学习要点
  9. 计算机it dt ct基础知识,ot是什么意思,什么是CT,IT,DT,OT
  10. 购买代购的产品算违法吗——看空姐代购被判刑有感
  11. PHP 计算当前时间是这一年的第几周
  12. linux 加固检测脚本,Linux系统检测和防护脚本
  13. Web前端-Ajax-01
  14. 黑马程序员----swift基础语法!
  15. [技术发展-28]:信息通信网大全、新的技术形态、信息通信行业高质量发展概览
  16. 淘宝助理导出CSV文件特殊字段详解
  17. enumeration value ... not handled in switch
  18. 【游记】THUSC2021
  19. mysql中为同一张表取多个别名为某一列取别名
  20. php实现成语小游戏,scratch3制作成语接龙小游戏图文教程

热门文章

  1. 动态规划01背包问题入门学习,详细笔记,推荐阅读
  2. [debug] 令人智熄的调试:忘记加return
  3. jquery系列教程1-选择器全解
  4. matlab2c使用c++实现matlab函数系列教程-diag函数
  5. AttributeError: module 'labelme.utils' has no attribute 'draw_label'
  6. smooth_l1_loss(y_true, y_pred)
  7. quartus仿真19:JK触发器序列1001检测器
  8. MySQL 相关知识细节及解析
  9. R - 变化plot字形,嵌入字体以pdf
  10. 网上邻居不能正常访问的处理