Mac OS X High Sierra下C++17 filesystem库编译失败求助
解决Mac OS X High Sierra下C++17 filesystem编译失败的问题
我之前在Mac上折腾C++17 filesystem特性时,也碰到过和你完全一样的坑,给你整理几个实测有效的解决办法:
1. 命令行编译的正确姿势
Mac自带的Clang在High Sierra阶段,默认不会启用C++17标准,而且filesystem库需要手动链接。你可以试试这条编译命令:
clang++ -std=c++17 -lc++fs your_source_file.cpp -o your_program
-std=c++17:强制编译器使用C17标准(如果你的Clang版本稍旧,也可以用-std=c++1z,这是C17正式发布前的预览标识)-lc++fs:显式链接filesystem库——早期Clang的libc++并没有把filesystem集成到默认库中,必须单独指定链接。
2. IDE中的配置调整
Xcode
- 打开项目的Build Settings
- 找到C++ Language Dialect,设置为
C++17或GNU++17 - 在Other Linker Flags中添加
-lc++fs
CLion
需要修改项目的CMakeLists.txt,添加C++17支持和链接选项:
cmake_minimum_required(VERSION 3.10) project(YourProjectName) # 启用C++17标准 set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) add_executable(YourExecutable your_source_file.cpp) # 链接filesystem库 target_link_libraries(YourExecutable PRIVATE c++fs)
3. 旧版本Clang的兼容方案
如果你的Xcode版本在9.x及更早(对应Clang 4.x/5.x),标准库的filesystem还处于实验性阶段,需要修改代码中的命名空间:
#include <string> #include <iostream> #include <experimental/filesystem> // 注意这里是experimental头文件 namespace fs = std::experimental::filesystem; // 使用experimental命名空间 int main() { std::string path = "/"; for (auto & p : fs::directory_iterator(path)) std::cout << p << std::endl; }
编译时同样需要加上-lc++fs链接参数。
内容的提问来源于stack exchange,提问作者Lu4
相关产品推荐
相关产品推荐

