前情提要
接之前的工作,今天我们继续来搞InfiniTAM工程的配置问题,之前经过一顿操作找各种问题,最终确定了我的各种配置没有错,仅仅是cuda的问题,真的是“一顿操作猛如虎,回头一看零杠五”。于是我们今天就cuda这个版本问题出发,来解决一下我们工程的配置问题;
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位并没有什么关系。
不管那么多,先把cuda勾选,直接把cuda root改成7.0的,编译运行下试试,如果成功,则今天就到此结束,不过我觉得应该没那么简单,在配环境的路上总是隐隐感到不安。
果然没让我失望,问题依旧存在,不要慌,我们找方法解决一下;
首先根据报错信息我们知道是有一个工程文件.cu.obj
生成错误,还有一个ITMLib.lib链接错误,应该是ITMLib子工程没有生成对应的lib,那么网上找找吧,这个问题一定是没有找到对应的cuda库,所以编译链接出了问题;因为工程中有若干个子工程,子工程对子工程有库依赖,那某些子工程编译不成功则势必会导致链接问题;
经过定位是ITMLib也就是生成那个ITMlib.lib
的子工程,我们来解决cuda链接的问题;
下午四点,又看了一篇:
【链接】InfiniTAM的编译探索
换编译工具
上面这个问题搞我好久,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来搞吧;
看到了一句话,看来还是得用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".