c++ - 为什么 OpenCV 在 NVCC 中无法编译?

标签 c++ visual-studio compiler-construction opencv cuda

我正在尝试将 CUDA 和 openCV 集成到一个项目中。问题是当使用 NVCC 时 openCV 无法编译,而普通的 c++ 项目可以编译得很好。这对我来说似乎很奇怪,因为我认为 NVCC 将所有主机代码传递给 c/c++ 编译器,在本例中为 Visual Studio 编译器。

我得到的错误是?

c:\opencv2.0\include\opencv\cxoperations.hpp(1137): 错误:没有运算符“=”与这些操作数匹配 操作数类型为: const cv::Range = cv::Range

c:\opencv2.0\include\opencv\cxoperations.hpp(2469): 错误:重载函数“std::abs”的多个实例与参数列表匹配: 函数“abs(长 double )” 函数“abs(浮点)” 函数“abs(双)” 函数“abs(长)” 函数“abs(int)” 参数类型为:(ptrdiff_t)

所以我的问题是为什么考虑到使用相同的编译器(应该)存在差异,其次我该如何解决这个问题。

最佳答案

一般来说,我建议保持主机代码和 CUDA 代码分离,仅对内核和主机“包装器”使用 nvcc。这对于 Visual Studio 来说特别容易,像平常一样创建项目(例如控制台应用程序),然后在 .cpp 文件中实现您的应用程序。当您想要运行 CUDA 函数时,请在一个或多个 .cu 文件中创建内核和包装器。 SDK 提供的 Cuda.rules 文件将自动启用 VS 编译 .cu 文件并将结果与​​其余 .cpp 文件链接。

关于c++ - 为什么 OpenCV 在 NVCC 中无法编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1847599/

相关文章:

asp.net - 从代码隐藏页面按 F7 时,如何使 Visual Studio 始终显示源 View 而不是设计 View ?

c - 如何避免if语句?因为编译器无法将其优化为 simd

linux - 在 windows 中编译 linux gcc - 在 windows 中使用 nvcc

c++ - 在不使用宏的情况下评估采用函数参数 DRY 的元函数?

c++ - STL map.find 在使用 vs2010 的调试和发布中表现不同

c++ - 使用 boost::bind 的菱形继承(钻石问题)

java - Xamarin VS2015 设计器不工作

sql - "Order By"使用参数作为列名

c++ - Visual Studio 2012 中的假变量

c++ - 开发 Cpp "make.exe"错误代码 = 0xc00000fd