【发布时间】:2016-11-09 07:44:39
【问题描述】:
我刚刚开始使用 CUDA 7.5 全新安装 Ubuntu 16.04,但在安装 OpenCV3.1 时遇到问题。
当我运行 make 时,出现以下错误:
[ 9%] Building NVCC (Device) object modules/core/CMakeFiles/cuda_compile.dir/src/cuda/cuda_compile_generated_gpu_mat.cu.o
/usr/include/string.h: In function ‘void* __mempcpy_inline(void, const void, size_t)’:
/usr/include/string.h:652:42: error: ‘memcpy’ was not declared in this scope
return (char *) memcpy (__dest, __src, __n) + __n;
我在各种(封闭的)github bug/problem讨论线程中找到了解决方案,如下:
In opencv/cmake/OpencvDetectCuda.cmake, change
set(NVCC_FLAGS_EXTRA ${NVCC_FLAGS_EXTRA} -gencode arch=compute_${CMAKE_MATCH_2},code=sm_${CMAKE_MATCH_1})
to
set(NVCC_FLAGS_EXTRA ${NVCC_FLAGS_EXTRA} -D_FORCE_INLINES -gencode arch=compute_${CMAKE_MATCH_2},code=sm_${CMAKE_MATCH_1})
这个解决方案对我有用,但我仍然不明白原来的问题或解决方案。为什么添加标志 -D_FORCE_INLINE 可以解决问题?为什么 string.h 有问题?这是(我认为)正在编译的更稳定的文件之一。我预计任何错误都会与 CUDA7.5 或 OpenCV3.1 相关联?
如果我再次看到这个问题,我该如何识别它?
【问题讨论】:
-
Ubuntu 16.04 不是官方支持的 CUDA 7.5 配置。 CUDA 7.5 linux 安装指南中列出了官方支持的配置。
-
我了解不支持 Ubuntu 16.04。不过我想知道的是,这个特定问题的解决方案是如何确定的。