解决InfiniTAM在windows下的cuda问题

前情提要

接之前的工作,今天我们继续来搞InfiniTAM工程的配置问题,之前经过一顿操作找各种问题,最终确定了我的各种配置没有错,仅仅是cuda的问题,真的是“一顿操作猛如虎,回头一看零杠五”。于是我们今天就cuda这个版本问题出发,来解决一下我们工程的配置问题;

传送门:
InfiniTAM在Windows10的配置
解决InfiniTAM在windows下的驱动问题

Cuda版本

这次我们老老实实的按照InfiniTAM工程说明上所说的,选择cuda 6.0或7.0版本,我这里选择的是7.0;

在nvidida网站上下载,发现有将近1个G的软件包,并且软件包是win8系统,win10系统应该也没问题,好现在让它下载,我需要起来去倒杯水。

下载下来双击安装就可以了,安装过程中会提示你关掉VS,好的,我们继续,安装完成后需要重启电脑。

安装的目录为C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.0,路径是默认的,无法更改,有点暴力哈。

回到Cmake

接下来是回到cmake配置cuda参数,这块应该不太好弄,我得上网找点成功的案例,另外我们要配置的全部是用x64位的,基于之前的经验,配置工程与32位或64位并没有什么关系。

解决InfiniTAM在windows下的cuda问题_第1张图片
先直接改

不管那么多,先把cuda勾选,直接把cuda root改成7.0的,编译运行下试试,如果成功,则今天就到此结束,不过我觉得应该没那么简单,在配环境的路上总是隐隐感到不安。

果然没让我失望,问题依旧存在,不要慌,我们找方法解决一下;

解决InfiniTAM在windows下的cuda问题_第2张图片
ITMLib_generated_CUDAInstantiations.cu.obj

首先根据报错信息我们知道是有一个工程文件.cu.obj生成错误,还有一个ITMLib.lib链接错误,应该是ITMLib子工程没有生成对应的lib,那么网上找找吧,这个问题一定是没有找到对应的cuda库,所以编译链接出了问题;因为工程中有若干个子工程,子工程对子工程有库依赖,那某些子工程编译不成功则势必会导致链接问题;

经过定位是ITMLib也就是生成那个ITMlib.lib的子工程,我们来解决cuda链接的问题;

下午四点,又看了一篇:
【链接】InfiniTAM的编译探索

解决InfiniTAM在windows下的cuda问题_第3张图片
cuda配置

换编译工具

上面这个问题搞我好久,ITMLib里的代码也看了看,发现不是代码问题,还是编译问题,因为我cmake工程选择的是2017的VS(用2013无法构建,具体原因不详,总不能现在去搞一遍cmake吧),而打开的时候用的2013编译(用2017编译会有报错)成功,所以我想可能这里会出现问题。

于是把2017卸载掉(或者都装得了),装一个2015,2013,2010;

用2010打开编译,发现错误:

 fatal error C1083: 无法打开包括文件:“mutex”: No such file or directory

查了一下发现是因为vs 2010并不支持c++ 11,于是放弃10版本;

用2013打开编译,在cmake里发现错误:

Failed to run MSBuild command:      
C:/Program Files (x86)/MSBuild/12.0/bin/MSBuild.exe

查了一下,Stack Overflow上说是要让用Visual Studio 15 2017去编译,那就只好用2017来搞吧;

解决InfiniTAM在windows下的cuda问题_第4张图片
NVCC

看到了一句话,看来还是得用2013搞啊,或者从nvcc下手,先用2013来解决,仍然是不能生成ITMLib_generated_CUDAInstantiations.cu.obj,那么现在定位到问题了,是跟这个nvcc有关;

感觉这篇博客要解决我的困扰,nvcc启动与配置说明

有的时候网上的经验真的不能信,cmake版本也是有要求的好嘛,下了一个cmake3.1.3来继续搞,我们得跟着别人成功的经验走,这下选择2013进行编译的时候,出现下面错误:

No CMAKE_C_COMPILER could be found.

我有点想吐了。。。

WTF,最怕这种盲目不知道该怎么解决的情况。。。

最后我要把所有的版本全部删掉,留一个2013版本,用排除法解决;但是现在还没有搞通就很烦,唉,生命真的在于折腾吗?

PS:

并且得到了一个VS对应的版本信息:

 Visual Studio 15 2017 [arch] = Generates Visual Studio 2017 project files. 
                                 Optional [arch] can be "Win64" or "ARM".    
  Visual Studio 14 2015 [arch] = Generates Visual Studio 2015 project files. 
                                 Optional [arch] can be "Win64" or "ARM".    
  Visual Studio 12 2013 [arch] = Generates Visual Studio 2013 project files. 
                                 Optional [arch] can be "Win64" or "ARM".    
  Visual Studio 11 2012 [arch] = Generates Visual Studio 2012 project files. 
                                 Optional [arch] can be "Win64" or "ARM".    
  Visual Studio 10 2010 [arch] = Generates Visual Studio 2010 project files. 
                                 Optional [arch] can be "Win64" or "IA64".   
  Visual Studio 9 2008 [arch]  = Generates Visual Studio 2008 project files. 
                                 Optional [arch] can be "Win64" or "IA64". 
解决InfiniTAM在windows下的cuda问题_第5张图片
Visual Studio

你可能感兴趣的:(解决InfiniTAM在windows下的cuda问题)