曾经装了winxp64 + nvidia driver19*.* + VS2008(sp1),感觉很卡,所以一直用cuda2.2.
最近装了win7,发现对190以上版本的驱动兼容性很好,就装了cuda2.3,本来想体验一下VS2010 beta2,
但是后来从微软工作人员处得知MSBuild还存在一些bug,无法正常使用cuda,并且暂时不能给我补丁,无奈
之下换回VS2008,不做傻乎乎吃螃蟹的人了。
在使用cuda2.3的时候,有时候可能会进行win32和x64的切换,我把几个常见问题罗列如下:
1、在VS2008里如何设置文件路径?
答:Tools》options》Projects and Solutions》VC++ Directories,右侧添加
win32 x64
Executable files C:/CUDA/bin C:/CUDA/bin64
Include files C:/CUDA/include C:/CUDA/include
Library files C:/CUDA/lib C:/CUDA/lib64
2、弹出错误fatal error LNK1112: module machine type 'x64' conflicts with target machine type 'X86'
答:这是由于我使用的是64位toolkit,默认编译成64位的obj文件,所以在win32模式下会弹出此错误。
打开project的property pages,在CUDA Build Rules v2.3.0(因为已经勾选了cuda.rules)》
General》Extra Options里面填写--machine 32,意思是生成32位的obj文件。具体参数可参看
nvcc的说明文档。
3、我的win32模式虽然编译通过,但是运行时会出现the application was unable to start correctly(oxc000007b)的错误提示。
答:不知道路径设置在哪里有错误,原因是启动时找到的cudart.dll版本错误,将C:/CUDA/bin中的
cudart.dll拷贝到本工程的文件夹,即可正确运行。暂时猜测是运行了系统环境变量里的(待验证)。
4、错误或警告defaultlib 'LIBCMT' conflicts with use of other libs; use /NODEFAULTLIB:library
答:这是由于使用运行库的版本不一致导致的,解决方案也很简单,就是你引用的所有的库都要用同一版本,
例如/MT, 或/MTd等等。在project的property pages中,C/C++》Code Generation》Runtime
library 和 CUDA Build Rules v2.3.0》Hybird CUDA/C++》Runtime Library中的设置要一致。