无法找到filesystem头文件
一、前言
这段时间接老板命令,做目标识别模型的嵌入式部署。需要将模型运行环境编译后打包到瑞芯微开发板上运行,在此之前我对原C++文件做过修改,为了能实现与厂商提供的数据接口对接。
我在用CMake打包过程中,C++推理文件需要用filesystem头文件的功能遍历文件夹,以读取相关数据,然而一次次的失败让我心生烦躁,具体表现如下:
/17106/Pengcaiping/rknpu-master/rknn/rknn_api/examples/rknn_yolov5_demo/src/main.cc:28:23: fatal error: filesystem: No such file or directory
#include <filesystem>
^
compilation terminated.
CMakeFiles/rknn_yolov5_demo.dir/build.make:110: recipe for target 'CMakeFiles/rknn_yolov5_demo.dir/src/main.cc.o' failed
make[2]: *** [CMakeFiles/rknn_yolov5_demo.dir/src/main.cc.o] Error 1
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/rknn_yolov5_demo.dir/all' failed
make[1]: *** [CMakeFiles/rknn_yolov5_demo.dir/all] Error 2
Makefile:129: recipe for target 'all' failed
make: *** [all] Error 2
无论我怎么试,都治不好,后来经过查相关资料是C++标准的问题,于是我升级了G++编译器到9.0版本,该版本已经严格支持C++17标准,且我在本地通过G++命令运行包含了filesystem头文件测试程序也成功了,但用CMake就怎么也弄不成功。
此刻我的心,好吧用这个表情包表达一下😂:
最后还是老老实实,把CMake系统学了一遍回来弄好的,我只能说,这些东西真的是个勾八。
二、解决方案
注意:下面编写的所有的文件都在同一个目录下
-
遇事先升级,编译器,如果你的运行环境已经是root用户则运行下面命令时要删除
sudo
sudo add-apt-repository ppa:ubuntu-toolchain-r/test sudo apt update //这里的版本根据你的需要来,但一般比较新 sudo apt install gcc-9 g++-9 # 修改软链接 cd /usr/bin sudo rm gcc g++ sudo ln -s gcc-9 gcc sudo ln -s g++-9 g++
-
写测试程序,在你的目录下创建一个test.cpp,内容如下
#include <iostream> #include <filesystem> int main() { std::filesystem::path current_directory = std::filesystem::current_path(); // g++ 9.4 std::cout << "current directory: " << current_directory << std::endl; return 0; }
-
编译测试程序
g++ test.cpp -std=c++17
-
运行测试程序
./a.out
若运行正确,则必然会输出你的CPP文件所在目录的路径
-
编写CMake文件
//CMakeLists.txt project(test) //设置项目名词 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17 -s -O3") //设置编译器标准及优化级别 add_executable(test test.cpp) //添加可执行文件(即将要被编译的) target_link_libraries(test stdc++fs) //链接库
-
编译并安装CMake文件
cmake . make
-
执行编译好的文件
./test
如果输出成果,则表示这次安装成功了,否则还有问题。
三、心灵的涤荡
孤独,是一种很高级的享受,是一种摆脱了人际关系的烦扰后,内心和自然、和周遭环境的一种直接接触。如果说寂寞是无人搭理而被动产生的一种情绪,那么孤独则是自己刻意选择独处的一种状态。
—— 郭城《人间行走:向着通透与自由》