python系列&deep_study系列:/usr/include/c++/11/bits/std_function.h:435:145: error: parameter packs not ex




/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进行降级

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

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

sudo apt install gcc-10 g++-10

6. 完善CMAKE指令

显式设置cudag++编译器

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

底下评论

问题一:

请问第6是在哪里设置的呀

作者回答:

就是在CMakeLists.txt里面

问题二:

你好,你的第五步安装gcc有没有其他方法呢,我安装提示

zs is not in the sudoers file. This incident will be reported.

没有办法进行下去表情包







芙门泡芙

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

posted @ 2024-09-27 09:46  坦笑&&life  阅读(22)  评论(0编辑  收藏  举报  来源