CUDA与OpenCV关于CUDA_nppi_LIBRARY问题

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

3,在cmake编译参数中加上

-D CUDA_GENERATION=Kepler

你可能感兴趣的:(CUDA与OpenCV关于CUDA_nppi_LIBRARY问题)