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异常

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值