gpt4 book ai didi

c++ - 在编译错误时制作 nvcc 输出跟踪

转载 作者:行者123 更新时间:2023-11-30 02:37:09 24 4
gpt4 key购买 nike

我在使用 nvcc 编译一些代码时遇到了一些问题。它严重依赖模板等,因此错误消息很难阅读。例如,目前我收到一条消息

/usr/include/boost/utility/detail/result_of_iterate.hpp:135:338: error: invalid use of qualified-name ‘std::allocator_traits<_Alloc>::propagate_on_container_swap’

这不是很有帮助。没有关于它来自哪里或模板参数是什么的信息。用例如编译gcc 显示了一些非常好的输出,包括候选和模板参数等。

无论如何也有可能获得带有 nvcc 的那些吗?或者至少对于主机代码?只用gcc编译是不可能的,因为要用到cuda函数,不能去掉。

这个问题不是关于那个特定的错误,而是关于如何从 nvcc 获取有关任何错误的更多详细信息。这个应该只是一个例子

精简工作示例(使用 nvcc -std=c++11 编译):

#include <memory>
#include <boost/utility/result_of.hpp>

struct foo{
int operator()(int x){ return x + 42; }
};
typename boost::result_of < foo(int) >::type
bar(int x){ return foo()(x); }

int main(int argc, char**argv){
return bar(argc);
}

或者更少的代码:

template<typename T>
struct TriggerError{

private:
template<typename _Tp>
static float helper(_Tp*);
static int helper(...);
typedef decltype(helper((T*)0)) privateWrong;

public:
typedef privateWrong SomethingWentWrong;
};

#include <boost/utility/result_of.hpp>

struct foo{
int operator()(int x){ return x + 42; }
};

typename boost::result_of < foo(int) >::type
bar(int x){ return foo()(x); }

int main(int argc, char**argv){
return bar(argc);
}

似乎出于某种原因,cudafe++ 将“类型”标记替换为“TriggerError::SomethingWentWrong”。所以这似乎是一个 CUDA 错误。

nvcc --version: Cuda编译工具,release 7.0, V7.0.27

gcc --version: gcc (Ubuntu 4.8.4-2ubuntu1~14.04) 4.8.4

最佳答案

关于主要问题:没有标志或任何东西可以使 nvcc 输出比现有更多的模板信息。显示的错误是语法错误而不是模板实例化错误,但它是由 CUDA 7.0 中的错误引起的。

供引用的bug信息:
该错误仅出现在 CUDA 7.0 中。它在 CUDA 6.5 中不存在,在 CUDA 7.5RC 及更高版本中得到修复。它只影响 C++11 编译模式(尝试在 C++98 中编译上述代码应该会失败)该错误也仅发生在 boost 1.5x(可能是 1.50 最新的 1.52)中,其中 boost::result_of 的 decltype 用法被介绍。一个更简单的例子:Compilation error with nvcc and c++11, need minimal failing example

有 3 种可能的解决方法:

  1. 使用std::result_of (c++11)
  2. 包括<boost/utility/result_of.hpp>作为第一个包括
  3. 使用 boost TR1 协议(protocol)并定义 BOOST_RESULT_OF_USE_TR1

关于c++ - 在编译错误时制作 nvcc 输出跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31940457/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com