关于C#:使用CMake,CUDA 9.0 RC和Visual Studio 2017使用contrib模块安装OpenCV 3.3.0

Installing OpenCV 3.3.0 with contrib modules using CMake, CUDA 9.0 RC and Visual Studio 2017

我正在尝试使用最新的CUDA 9.0 RC安装带有contrib模块的OpenCV 3.3.0,以便与Microsoft Visual Studio 2017兼容。CUDA安装非常简单,已成功集成到VS 2017中。我正在运行根据网上的各种说明,这使我能够在没有CUDA的情况下成功构建contrib模块。

但是,当我运行CMake时(确保将其设置为VS 2017 x64,请参阅:CMake:编译OpenCV时未找到CUDA库),我得到了经典的代码:

1
2
3
4
CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
Please set them or make sure they are set and tested correctly in the CMake files:
CUDA_nppi_LIBRARY (ADVANCED):
    linked by target...

这不是上面发布的x64问题。 CUDA 9.0RC实际上不包含nppi.lib,相反,Nvidia似乎将其分为几个库:nppial.lib,nppicc.lib,nppicom.lib,nppidei.lib,nppif.lib,nppig.lib,nppist。 lib nppisu.lib和nppitc.lib

为解决此问题,我将CUDA 8.0中的nppi.lib直接添加到CUDA 9.0的库目录中。这似乎使对CMake的配置感到满意,但是最终当我在Visual Studio中构建解决方案时,几乎所有的操作都因以下变化而失败:

1
2
3
5>LINK : fatal error LNK1104: cannot open file '..\\..\\lib\
elease\\opencv_core330.lib'

5>Done building project"opencv_ml.vcxproj" -- FAILED.

我还尝试进入CMakeCache文件并将nppi库的路径更改为所有上述文件,并以分号分隔。结果是一样的。 (请注意,我只更改了库文件路径,而没有更改CMakeCache中其他所有关于nppi的内容)。

我希望这可能是CUDA 9.0 RC的问题,可能需要CMake的补丁程序。有人有解决方法/我做错了什么吗?
感谢您提供的任何帮助。


我已经解决了这个问题。我使用lib.exe将这几个库合并到一个库中。

  • 运行" VS 2017 x64本机工具命令提示符"
  • cd进入cuda文件夹
  • lib.exe /out:nppi.lib nppial.lib nppicc.lib nppicom.lib nppidei.lib nppif.lib nppig.lib nppim.lib nppist.lib nppisu.lib nppitc.lib

  • 针对那些难以生成nppi.lib的人,如王皓天所说的

    1)运行步骤1并cd到C:\\\\ Program Files(x86)\\\\ Microsoft Visual Studio 14.0 \\\\ VC(如果使用vs15)

    2)vcvarsall.bat x64

    然后继续上述步骤2