代码之家  ›  专栏  ›  技术社区  ›  japedo

将CUDA 7.0与gcc 5.2.0和c++11一起使用

  •  1
  • japedo  · 技术社区  · 9 年前

    我正在尝试用nvcc编译C++文件。命令如下所示:

    nvcc -std=c++11 file.cu -o file
    

    编译器版本如下:

    $ nvcc --version
    Cuda compilation tools, release 7.0, V7.0.27
    $ gcc --version
    gcc (GCC) 5.2.0
    

    这些错误看起来像是nvcc与最新的gcc版本不兼容。

    /usr/include/c++/5.2.0/bits/stl_iterator_base_types.h(154): error: class "std::vector<Pixel, std::allocator<Pixel>>" has no member "iterator_category"
          detected during:
            instantiation of class "std::__iterator_traits<_Iterator, void> [with _Iterator=std::vector<Pixel, std::allocator<Pixel>>]"
    /usr/include/c++/5.2.0/type_traits(1492): error: class "std::__is_convertible_helper<<error-type>, std::input_iterator_tag, false>" has no member class "type"
          detected during instantiation of class "std::is_convertible<_From, _To> [with _From=<error-type>, _To=std::input_iterator_tag]"
    /usr/include/c++/5.2.0/type_traits(1492): error: not a class or struct name
          detected during instantiation of class "std::is_convertible<_From, _To> [with _From=<error-type>, _To=std::input_iterator_tag]" 
    [...]
    

    有人遇到过类似的问题吗?谷歌搜索对我没有帮助。也许我在这里错过了一些东西,因为它对我来说还是新的。

    提前感谢!

    1 回复  |  直到 9 年前
        1
  •  3
  •   njuffa    9 年前

    由于CUDA工具链允许在同一源文件中混合设备和主机代码,因此需要与主机工具链进行相当紧密的集成。因此,CUDA工具链通常无法与比NVIDIA测试和支持的版本更新的主机工具链一起使用。

    每个CUDA版本都附带一份“入门”文档,说明支持的主机工具链版本。本文档有三个特定于操作系统的版本;问题中的信息表明您使用的是Linux平台,因此您需要查阅Linux版本的“入门”。

    由于CUDA 7.0是CUDA目前最新发布的版本,因此也可以在网上找到Linux版本的“入门”文档 here 。它显示支持各种版本的gcc 4.8和gcc 4.9,具体取决于您使用的Linux版本。