filesystem编译Bug记录

文章目录

前言

filesystem的前身是boost里的boost.filesystem。后来被引入C++的TS作为可选支持,命名空间在std::experimental::filesystem。再后来C++17对其做了一些修改后正式引入标准库,命名空间在std::filesystem
但是编译过程中出现了一些问题,就·记录下来。

Bug汇总

Bug:error: ‘filesystem’ has not been declared

在这里插入图片描述
问题1:由于之前GCC4.8.5中不存在filesystem文件,因此需要升级GCC、G++版本。升级过程自行百度注意:尽量用依赖(命令行)形式进行安装,如果用源码安装的话运行时间会很久。
笔者安装的是gcc version 8.4.0 (Ubuntu 8.4.0-1ubuntu1~18.04)
之后切换GCC、G++版本

#update-alternatives是ubuntu系统中专门维护系统命令链接符的工具>
#通过它可以很方便的设置系统默认使用哪个命令、哪个软件版本。
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.X Y(优先级) --slave /usr/bin/g++ g++ /usr/bin/g++-4.X

选择GCC版本(G++选择类似)

sudo update-alternatives --config gcc

直接输入指定版本的编号即可完成切换。

【参考链接:linux下gcc、g++不同版本的安装和切换

问题2:但是完成GCC,G++版本切换后仍旧报出刚才的错误。
参考了stackoverflow上面的这篇文章。

https://stackoverflow.com/questions/55474690/stdfilesystem-has-not-been-declared-after-including-experimental-filesystem/55474923#55474923

将源代码中的部分代码进行替换

  • #include< filesystem> 替换成#include<experimental/filesystem>
  • filesystem替换成experimental::filesystem

之后运行一下,又出现了Bug.`(>﹏<)′

undefined reference to std::experimental::filesystem::v1::current_path[abi:cxx11]
在这里插入图片描述
参考了这篇文章后顺利解决

https://stackoverflow.com/questions/33149878/experimentalfilesystem-linker-error

需要添加target_link_libraries(项目名 stdc++fs)

我在项目CMakeLists.txt的写法

cmake_minimum_required( VERSION 3.10 )
project( AutoStitch )

find_package( OpenCV REQUIRED )
add_executable( AutoStitch  autostitch.cpp )
target_link_libraries(AutoStitch  ${OpenCV_LIBS}  stdc++fs )

顺利完成make
在这里插入图片描述

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值