我已经检查了很多关于c++17下文件系统链接的问题,但仍然无法成功链接。我的main.cpp
文件如下。
# include <experimental/filesystem>
int main(int argc, char**argv)
{
std::string imageDirectory = "./image";;
std::vector<std::string> imagePath;
for (const auto& entry: std::filesystem::directory_iterator(imageDirectory))
{
imagePath.push_back(entry.path());
std::cout << entry.path() << std::endl;
}
return 0;
}
我的CMakeLists.txt
如下。
cmake_minimum_required(VERSION 3.8 FATAL_ERROR)
project(visual_hull LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 17)
add_library(dataIO
STATIC
dataIO.hpp
dataIO.cpp)
find_package(OpenCV REQUIRED core highgui imgproc)
target_link_libraries(dataIO ${OpenCV_LIBS})
add_executable(visual_hull main.cpp)
target_link_libraries(visual_hull PUBLIC dataIO
stdc++fs)
错误如下所示。
/home/SENSETIME/zhangshunkang/Downloads/programming/c++/visual_hull/main.cpp: In function ‘int main(int, char**)’:
/home/SENSETIME/zhangshunkang/Downloads/programming/c++/visual_hull/main.cpp:15:31: error: ‘std::filesystem’ has not been declared
for (const auto& entry: std::filesystem::directory_iterator(imageDirectory))
^
CMakeFiles/visual_hull.dir/build.make:62: recipe for target 'CMakeFiles/visual_hull.dir/main.cpp.o' failed
make[2]:***[CMakeFiles/visual_hull.dir/main.cpp.o] Error 1
CMakeFiles/Makefile2:72: recipe for target 'CMakeFiles/visual_hull.dir/all' failed
make[1]:***[CMakeFiles/visual_hull.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make:***[all] Error 2
3条答案
按热度按时间ssgvzors1#
看起来你的C++17编译器没有包含标准的
filesystem
头文件。一个可能的解决方法是:然后在所有地方都使用
fs::
而不是std::filesystem::
。如果你在使用C++11/14时想使用
filesystem
,选中__cplusplus >= 201703L
只是一个额外的预防措施。在这些情况下,__has_include(<filesystem>)
可能是true
,但包括它将不会定义std::filesystem
命名空间。rt4zxlrg2#
我们使用
std::filesystem::directory_iterator
。std::filesystem::directory_iterator
和整个命名空间std::filesystem
都在头文件<filesystem>
中声明。你没有包含头文件
<filesystem>
,而是包含了<experimental/filesystem>
。这个头文件没有声明std::filesystem::directory_iterator
,而是声明了std::experimental::filesystem::directory_iterator
。你可以使用标准文件系统库,也可以使用技术规范中的实验文件系统库,但是不能混合使用。如果你的目标是C17,那么你应该使用
<filesystem>
。我将得到文件系统错误:没有这样的文件或目录
理想的解决方案是将您的编译器升级到对C17具有非实验性支持的版本。否则,请使用实验性TS或Boost。
im9ewurl3#
Cpp 17不理解标准库。
在Cmake.txt中添加: