Ubuntu 16.04下GCC 7.2缺失<execution>头文件的解决方法求助
解决GCC 7.2.0编译C++17代码时找不到头文件的问题
嘿,我之前碰到过类似的坑,GCC 7.x系列对C++17并行标准库的支持确实有点“半吊子”,咱们一步步来搞定这个问题:
首先,你遇到的fatal error: execution: No such file or directory,本质原因是GCC 7.2.0里的<execution>属于实验性C++17特性,默认没有启用,而且相关的依赖库可能也没安装完整。
下面是具体的解决步骤:
1. 先补全必要的依赖包
Ubuntu 16.04上的GCC 7.2.0,并行STL需要依赖libstdc++-7-dev和libtbb-dev(并行STL常用TBB作为后端实现),先执行这两条命令确保它们安装到位:
sudo apt-get update sudo apt-get install libstdc++-7-dev libtbb-dev
2. 修改编译命令,启用实验性支持
你原来的编译命令缺少了开启并行STL的关键参数,需要调整成下面两种方式之一:
如果用OpenMP作为并行后端:
g++ -std=c++17 -fopenmp -D_GLIBCXX_PARALLEL auto_parallel.cpp -o auto_parallel
如果用TBB作为并行后端:
g++ -std=c++17 -ltbb -D_GLIBCXX_PARALLEL auto_parallel.cpp -o auto_parallel
我给你解释下这些参数的作用:
-fopenmp/-ltbb:分别启用OpenMP或TBB并行后端,为并行算法提供执行环境-D_GLIBCXX_PARALLEL:这个宏会开启GNU的并行标准库扩展,同时让编译器能识别并找到<execution>头文件
3. 备选方案:升级到更高版本的GCC
GCC 7.x对C++17的支持确实不够成熟,很多特性都处于实验阶段。如果上面的方法还搞不定,不如直接升级到GCC 8及以上版本——Ubuntu 16.04可以通过官方工具链PPA来安装:
sudo add-apt-repository ppa:ubuntu-toolchain-r/test sudo apt-get update sudo apt-get install gcc-8 g++-8
之后用新编译器编译:
g++-8 -std=c++17 auto_parallel.cpp -o auto_parallel
GCC 8及以后对C++17的支持更全面,<execution>头文件不需要额外参数就能直接使用,省心不少。
内容的提问来源于stack exchange,提问作者user2315094
相关产品推荐
相关产品推荐

