我正在尝试在Windows上安装VisionWorks,如名为" VisionWorks 1.0 for Windows README"的链接中所述。在本页面: https://developer.nvidia.com/embedded/visionworks
根据README文档,VisionWorks与Windows兼容,具有以下配置:
OS : Windows 8 x64
OpenCV : public OpenCV 2.4.12
CUDA : NVIDIA CUDA 7.0
我正在使用与README中描述的以下变量完全相同的配置(使用我的特定PC路径):
[CUDA_VERSION] : 7.0
[CUDA_INSTALL_DIR] : C:\cuda\v7
[OpenCV_INSTALL_DIR] : C:\opencv
[OpenCV_VERSION] : 2412
[VisionWorks_VERSION] : 1.0
[VisionWorks_INSTALL_DIR] : C:\cuda\VisionWorks
[SAMPLES_BUILD_DIR] : C:\cuda\VisionWorks\SAMPLES_BUILD_DIR
我按照README中的说明进行操作,如下所示(帖子末尾的图片):
第1步: 将样本从[VisionWorks_INSTALL_DIR] \ share \ visionworks \ sources复制到a 具有写访问权限的目录[SAMPLES_BUILD_DIR]。
第2步:
打开Visual Studio的开发人员命令提示符 - VS2013 x64本机工具
命令提示符。
第3步: 转到[SAMPLES_BUILD_DIR]:
> cd [SAMPLES_BUILD_DIR]
第4步:
编辑config.nmake文件以插入所有先决条件的正确路径
安装目录信息。
# Dependency locations
CUDA_DIR = [CUDA_INSTALL_DIR]
OPENCV_DIR = [OpenCV_INSTALL_DIR]\build
OpenCV_VERSION = [OpenCV_VERSION]
VISIONWORKS_DIR = [VisionWorks_INSTALL_DIR]
# Debug build?
dbg = 0
第5步: 使用nmake构建样本
> nmake
但是当我执行nmake命令时,我收到以下错误:
C:\cuda\VisionWorks\SAMPLES_BUILD_DIR> nmake
Microsoft(R)程序维护实用程序版本12.00.21005.1 版权所有(C)Microsoft Corporation。保留所有权利。
cd nvxio&& " C:\ Program Files(x86)\ Microsoft Visual Studio 12.0 \ VC \ BIN \ amd64 \ nmake.exe" / / nologo build 如果不存在" obj \ release" mkdir" obj \ release" cl / EHsc / O2 / MD / nologo" -DVISIONWORKS_DIR = \" C:/ cuda / VisionWorks \"" -D USE_GUI = 1 -DUSE_GLFW = 1 -I./include -I./shaders -I ../ 3rdparty / opengl -I ../ 3rdparty / freetype / include -I ../ 3rdparty / glfw3 / include -I./src -DUSE_OPENCV = 1 -I" C:\ c uda \ v7 \ include" -I" C:\ opencv \ include" -I" C:\ cuda \ VisionWorks \ include" -I" .. \ 3 rdparty \ eigen" / FO"物镜\释放\" / c src \ Application.cpp src \ ArgumentParser.cpp src \ ConfigParser.cpp src \ OptionHandler.cpp src \ Utility.cpp Application.cpp C:\ CUDA \ visionworks \ samples_build_dir \ nvxio \包括\ nvxio \ OptionHandler.hpp(109) :错误C2783:' nvxio ::范围nvxio :: ranges :: all(void)' : 不能 为T' T'推断tertlate论证 C:\ CUDA \ visionworks \ samples_build_dir \ nvxio \包括\ nvxio \ Range.hpp(163) :见'nvxio :: ranges :: all'的声明 C:\ CUDA \ visionworks \ samples_build_dir \ nvxio \包括\ nvxio \ OptionHandler.hpp(118) :错误C2783:' nvxio ::范围nvxio :: ranges :: all(void)' : 不能 为T' T'推断tertlate论证 C:\ CUDA \ visionworks \ samples_build_dir \ nvxio \包括\ nvxio \ Range.hpp(163) :见'nvxio :: ranges :: all'的声明 C:\ CUDA \ visionworks \ samples_build_dir \ nvxio \包括\ nvxio \ OptionHandler.hpp(127) :错误C2783:' nvxio ::范围nvxio :: ranges :: all(void)' : 不能 为T' T'推断tertlate论证 C:\ CUDA \ visionworks \ samples_build_dir \ nvxio \包括\ nvxio \ Range.hpp(163) :见'nvxio :: ranges :: all'的声明 C:\ CUDA \ visionworks \ samples_build_dir \ nvxio \包括\ nvxio \ OptionHandler.hpp(136) :错误C2783:' nvxio ::范围nvxio :: ranges :: all(void)' : 不能 为T' T'推断tertlate论证 C:\ CUDA \ visionworks \ samples_build_dir \ nvxio \包括\ nvxio \ Range.hpp(163) :见'nvxio :: ranges :: all'的声明ArgumentParser.cpp C:\ CUDA \ visionworks \ samples_build_dir \ nvxio \包括\ nvxio \ OptionHandler.hpp(109) :错误C2783:' nvxio ::范围nvxio :: ranges :: all(void)' : 不能 为T' T'推断tertlate论证 C:\ CUDA \ visionworks \ samples_build_dir \ nvxio \包括\ nvxio \ Range.hpp(163) :见'nvxio :: ranges :: all'的声明 C:\ CUDA \ visionworks \ samples_build_dir \ nvxio \包括\ nvxio \ OptionHandler.hpp(118) :错误C2783:' nvxio ::范围nvxio :: ranges :: all(void)' : 不能 为T' T'推断tertlate论证 C:\ CUDA \ visionworks \ samples_build_dir \ nvxio \包括\ nvxio \ Range.hpp(163) :见'nvxio :: ranges :: all'的声明 C:\ CUDA \ visionworks \ samples_build_dir \ nvxio \包括\ nvxio \ OptionHandler.hpp(127) :错误C2783:' nvxio ::范围nvxio :: ranges :: all(void)' : 不能 为T' T'推断tertlate论证 C:\ CUDA \ visionworks \ samples_build_dir \ nvxio \包括\ nvxio \ Range.hpp(163) :见'nvxio :: ranges :: all'的声明 C:\ CUDA \ visionworks \ samples_build_dir \ nvxio \包括\ nvxio \ OptionHandler.hpp(136) :错误C2783:' nvxio ::范围nvxio :: ranges :: all(void)' : 不能 为T' T'推断tertlate论证 C:\ CUDA \ visionworks \ samples_build_dir \ nvxio \包括\ nvxio \ Range.hpp(163) :见'nvxio :: ranges :: all'的声明ConfigParser.cpp ./include\NVXIO/OptionHandler.hpp(109):错误C2783:' nvxio ::范围 nvxio :: ra nges :: all(void)' :无法推断模板参数 ' T' C:\ CUDA \ visionworks \ samples_build_dir \ nvxio \包括\ nvxio \ Range.hpp(163) :见'nvxio :: ranges :: all'的声明 ./include\NVXIO/OptionHandler.hpp(118):错误C2783:' nvxio ::范围 nvxio :: ra nges :: all(void)' :无法推断模板参数 ' T' C:\ CUDA \ visionworks \ samples_build_dir \ nvxio \包括\ nvxio \ Range.hpp(163) :见'nvxio :: ranges :: all'的声明 ./include\NVXIO/OptionHandler.hpp(127):错误C2783:' nvxio ::范围 nvxio :: ra nges :: all(void)' :无法推断模板参数 ' T' C:\ CUDA \ visionworks \ samples_build_dir \ nvxio \包括\ nvxio \ Range.hpp(163) :见'nvxio :: ranges :: all'的声明 ./include\NVXIO/OptionHandler.hpp(136):错误C2783:' nvxio ::范围 nvxio :: ra nges :: all(void)' :无法推断模板参数 ' T' C:\ CUDA \ visionworks \ samples_build_dir \ nvxio \包括\ nvxio \ Range.hpp(163) :见'nvxio :: ranges :: all'的声明OptionHandler.cpp C:\ CUDA \ visionworks \ samples_build_dir \ nvxio \包括\ nvxio \ OptionHandler.hpp(109) :错误C2783:' nvxio ::范围nvxio :: ranges :: all(void)' : 不能 为T' T'推断tertlate论证 C:\ CUDA \ visionworks \ samples_build_dir \ nvxio \包括\ nvxio \ Range.hpp(163) :见'nvxio :: ranges :: all'的声明 C:\ CUDA \ visionworks \ samples_build_dir \ nvxio \包括\ nvxio \ OptionHandler.hpp(118) :错误C2783:' nvxio ::范围nvxio :: ranges :: all(void)' : 不能 为T' T'推断tertlate论证 C:\ CUDA \ visionworks \ samples_build_dir \ nvxio \包括\ nvxio \ Range.hpp(163) :见'nvxio :: ranges :: all'的声明 C:\ CUDA \ visionworks \ samples_build_dir \ nvxio \包括\ nvxio \ OptionHandler.hpp(127) :错误C2783:' nvxio ::范围nvxio :: ranges :: all(void)' : 不能 为T' T'推断tertlate论证 C:\ CUDA \ visionworks \ samples_build_dir \ nvxio \包括\ nvxio \ Range.hpp(163) :见'nvxio :: ranges :: all'的声明 C:\ CUDA \ visionworks \ samples_build_dir \ nvxio \包括\ nvxio \ OptionHandler.hpp(136) :错误C2783:' nvxio ::范围nvxio :: ranges :: all(void)' : 不能 为T' T'推断tertlate论证 C:\ CUDA \ visionworks \ samples_build_dir \ nvxio \包括\ nvxio \ Range.hpp(163) :见'nvxio :: ranges :: all'的声明Utility.cpp生成 代码... NMAKE:致命错误U1077:'" C:\ Program Files(x86)\ Microsoft Visual Studio 12.0 \ VC \ BIN \ amd64 \ cl.EXE"' :返回代码' 0x2' 停止。 NMAKE:致命错误U1077 :' cd' :返回代码' 0x2' 停止。
C:\ CUDA \ VisionWorks \ SAMPLES_BUILD_DIR>
Images showing the steps I performed
我做错了什么?
答案 0 :(得分:0)
问题是VS 2013编译器中存在一个错误(更多功能缺少实现)。函数模板参数仅根据参数中的类型推导出来,因此不带参数的调用不会触发推理。
VisionWorks相当丑陋的解决方法是替换Range.hpp中的模板
/*
* \ingroup group_nvxio_range
* \brief Creates a range that includes all points.
* \return The range.
*/
template <typename T>
inline Range<T> all() {
return { std::numeric_limits<T>::lowest(), std::numeric_limits<T>::max(), true, true };
}
使用带有伪参数的模板,并相应地修复OptionHandler.hpp中的用法。
/*
* \ingroup group_nvxio_range
* \brief Creates a range that includes all points.
* \return The range.
*/
template <typename T>
inline Range<T> all(T dummy) {
return { std::numeric_limits<T>::lowest(), std::numeric_limits<T>::max(), true, true };
}
以便OptionHandler.hpp中的调用看起来像
static ptr real(float *result, const Range<float> &validRange = ranges::all<float>((float)1));
因此,这使得代码非常难看,并且在某种程度上打败了模板的目的。这个模板问题在VS 2015中得到修复,但CUDA在2015年没有编译,这使得OpenVX的更高级使用毫无意义。