/usr/include/c++/11/bits/std_function.h:435:145: error: parameter packs not expanded with ‘...’:

最近在学习cuda编程,本人在构建cuda的helloworld项目的时候出现了以下错误

FAILED: CMakeFiles/cuda_learning.dir/test.cu.o 
/bin/nvcc -forward-unknown-to-host-compiler -DUSE_C10D_GLOO -DUSE_C10D_NCCL -DUSE_DISTRIBUTED -DUSE_RPC -DUSE_TENSORPIPE -isystem /home/black/anaconda3/lib/python3.8/site-packages/torch/include -isystem /home/black/anaconda3/lib/python3.8/site-packages/torch/include/torch/csrc/api/include -g -G -DONNX_NAMESPACE=onnx_c2 -gencode arch=compute_86,code=sm_86 -Xcudafe --diag_suppress=cc_clobber_ignored,--diag_suppress=integer_sign_change,--diag_suppress=useless_using_declaration,--diag_suppress=set_but_not_used,--diag_suppress=field_without_dll_interface,--diag_suppress=base_class_has_different_dll_interface,--diag_suppress=dll_interface_conflict_none_assumed,--diag_suppress=dll_interface_conflict_dllexport_assumed,--diag_suppress=implicit_return_from_non_void_function,--diag_suppress=unsigned_compare_with_zero,--diag_suppress=declared_but_not_referenced,--diag_suppress=bad_friend_decl --expt-relaxed-constexpr --expt-extended-lambda -g -std=c++17 -D_GLIBCXX_USE_CXX11_ABI=0 -MD -MT CMakeFiles/cuda_learning.dir/test.cu.o -MF CMakeFiles/cuda_learning.dir/test.cu.o.d -x cu -c /home/black/CudaProjects/cuda_learning/test.cu -o CMakeFiles/cuda_learning.dir/test.cu.o
/usr/include/c++/11/bits/std_function.h:435:145: error: parameter packs not expanded with ‘...’:
  435 |         function(_Functor&& __f)
      |                                                                                                                                                 ^ 
/usr/include/c++/11/bits/std_function.h:435:145: note:         ‘_ArgTypes’
/usr/include/c++/11/bits/std_function.h:530:146: error: parameter packs not expanded with ‘...’:
  530 |         operator=(_Functor&& __f)
      |                                                                                                                                                  ^ 
/usr/include/c++/11/bits/std_function.h:530:146: note:         ‘_ArgTypes’
ninja: build stopped: subcommand failed.

1. 首先先展示一下我的环境

OS:wsl2下的Ubuntu22
cuda:11.5
GPU:RTX3060 Laptop

2. 分析输出的报错信息

从下面可以发现是C++版本的问题,从下面的输出可以看出来nvcc在编译的时候使用了C++/11的头文件,因此不支持c++17下面的特性;

/usr/include/c++/11/bits/std_function.h:435:145: error: parameter packs not expanded with ‘...’:
  435 |         function(_Functor&& __f)

3. 在CMAKELISTS.txt中设置无效

我尝试在CMakeList.txt中设置以下内容没有效果,下面的代码指出使用c++17版本

set(CMAKE_CXX_FLAGS "-std=c++17")
set(CMAKE_CUDA_FLAGS "-g -G -std=c++17")

4. 经过查阅,需要对g++和gcc进行降级

我所使用的gcc、g++版本都是11.4.0以上的,从参考资料里面得知降级至g+±10的版本就可以解决这个错误

5. 安装gcc-10,g++ -10

sudo apt install gcc-10 g++-10

6. 完善CMAKE指令

显式设置cuda的g++编译器

set(CMAKE_CXX_FLAGS "-std=c++17 -DCMAKE_CUDA_HOST_COMPILER=/usr/bin/g++-10")
set(CMAKE_CUDA_FLAGS "-g -G -std=c++17")

7. 对于Clion,也可以这样做

在这里插入图片描述

8. 参考资料

https://github.com/stotko/stdgpu/issues/337

  • 11
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值