ros-melodic默认需要OpenCV3.2,下载OpenCV3.2源码后,编译支持CUDA,会报错缺少CUDA_nppi_LIBRARY定义,系统CUDA是10.0。
这是由于CUDA9以后就去掉了nppi。在CUDA的lib目录下查找nppi,没有nppi.so。CUDA10中的nppi库为:
find_cuda_helper_libs(nppial)
find_cuda_helper_libs(nppicc)
find_cuda_helper_libs(nppicom)
find_cuda_helper_libs(nppidei)
find_cuda_helper_libs(nppif)
find_cuda_helper_libs(nppig)
find_cuda_helper_libs(nppim)
find_cuda_helper_libs(nppist)
find_cuda_helper_libs(nppisu)
find_cuda_helper_libs(nppitc)
1,在OpenCV3.2源码目录下的cmake文件夹中有FindCUDA.cmake文件,修改其中的内容,将所有设置nppi的地方替换成下面的:
nppial
nppicc
nppicom
nppidei
nppif
nppig
nppim
nppist
nppisu
nppitc
如:
unset(CUDA_nppial_LIBRARY CACHE)
unset(CUDA_nppicc_LIBRARY CACHE)
unset(CUDA_nppicom_LIBRARY CACHE)
unset(CUDA_nppidei_LIBRARY CACHE)
unset(CUDA_nppif_LIBRARY CACHE)
unset(CUDA_nppig_LIBRARY CACHE)
unset(CUDA_nppim_LIBRARY CACHE)
unset(CUDA_nppist_LIBRARY CACHE)
unset(CUDA_nppisu_LIBRARY CACHE)
unset(CUDA_nppitc_LIBRARY CACHE)
找到
if(CUDA_GENERATION STREQUAL "Fermi")
set(__cuda_arch_bin "2.0")
去掉这两行,并且找到
if(${CUDA_VERSION} VERSION_LESS "8.0")
set(__cuda_arch_bin "2.0 3.0 3.5 3.7 5.0 5.2")
else()
set(__cuda_arch_bin "2.0 3.0 3.5 3.7 5.0 5.2 6.0 6.1")
endif()
去掉2.0
set(__cuda_arch_bin "3.0 3.5 3.7 5.0 5.2 6.0 6.1")
2,opencv\modules\cudev\include\opencv2\cudev\common.hpp
加入#include <cuda_fp16.h>
3,在cmake编译参数中加上
-D CUDA_GENERATION=Kepler