问题列表
相对路径
添加依赖库
1、属性->C/C+±>附加包含目录
注:添加头文件目录,必须指向子文件夹
2、属性->链接器->常规->附加库目录
注:添加exp和lib(输出库文件、输入库文件)的目录
3、属性->链接器->输入->附加依赖项
注:添加依赖库文件
4、属性->C/C+±>预处理器->预处理器定义
解决方案与项目不在同一目录
添加项属性目录时,使用相对地址有利于项目的迁移。
但vs默认解决方案与项目不在同一目录:
属性管理器的自动显示路径,以解决方案目录开始算! 实际应该填以项目目录开始算的相对路径!
C语言输入文件名
string folder = "D:\\Pictures\\minepic\\New Folder"; //此处用的是斜杠,也可以用反斜
//但需注意的是由于C语言的特点,要用双反斜杠,即"E:\\MATLAB\\LBP\\scene_categories"
//cin >> folder; //也可以用此段代码直接在DOS窗口输入地址,此时只需正常的单反斜杠即可
MSB8027: Two or more files with the name of ***.cpp will produce outputs to the same location.
VC++编译源文件时默认全部输出(对象文件)到同一个目录下,遇到同名源文件覆盖前面的同名对象文件。为了解决这个问题,你可以设置输出路径与源文件路径类似。以下操作在Visual Studio 2013 (Update 3)下适用:
右键项目->属性->配置属性->C/C+±>输出文件->对象文件名,将(IntDir)改为(IntDir)改为(IntDir)/%(RelativeDir)/。
设置完毕后,编译阶段输出路径将会把源文件路径考虑进去而不是只考虑源文件名。
MSB3721
C:\Program Files
(x86)\MSBuild\Microsoft.Cpp\v4.0\V120\BuildCustomizations\CUDA
7.5.targets(604,9): error MSB3721: 命令““C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5\bin\nvcc.exe”
-gencode=arch=compute_20,code=“sm_20,compute_20” --use-local-env --cl-version 2013 -ccbin “F:\Program Files\Microsoft Visual Studio 12.0\VC\bin” -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5\include" -I"C:\Program Files\NVIDIA GPU Computing
Toolkit\CUDA\v7.5\include" -G --keep-dir Debug -maxrregcount=0
–machine 32 --compile -cudart static -g -DWIN32 -D_DEBUG -D_CONSOLE -D_MBCS -Xcompiler "/EHsc /W3 /nologo /Od /Zi /RTC1 /MDd " -o Debug\main.cu.obj “d:\documents\visual studio 2013\Projects\cuda_Helloworld\GPU_FBP\main.cu””已退出,返回代码为 2。
按照能找到的解决方法首先检查:
“–machine 32”,这表示device端生成的是32bit的代码,而解决方案已经设置为X64,两者不匹配。
项目属性——配置属性中GPU设置部分——host——Target Machine Platform这里改为X64,(此时命令行中的相应位置的编译参数会变成–machine 64),此时再重新编译即可。
但是没什么用
冷静下来发现一个核函数中有未定义的参数,加上了。
还有再编译还是有MSB3721,错误增加了,是函数调用的问题:
no instance of overloaded function “max” matches the argument list
换了个方式写语句,解决了。
再编译到报错的.cu文件就没有错误提示啦~
希望看到这的你也再仔细检查一下哦!
不存在从std::string 到const char*的适当转换函数
使用c_str()函数。
c_str函数的返回值是const char*,代码片段如下:
vector<string> files;
getFiles(folder, files); //files为返回的文件名构成的字符串向量组
const char* filename = files[1].c_str();
FILE *file = fopen(filename, "r");
使用未定义的 struct timeval 解决方案(不允许使用不完整的类型)
添加头文件
#include <windows.h>
在某些环境下,添加头文件还是会出现上述的情况,这种情况下,可以在包含文件下,添加如下声明
extern struct timeval;
error LNK 链接错误
error LNK2019: 无法解析的外部符号 cufftPlan1d
链接器 - 输入 - 附加依赖项 cufft.lib
error:LNK2005 函数已经在*.obj中定义
出现问题时,在main.cu中(伪代码)
#include "support.h"
#include "kernel.cu"
调用了在kernel.cu中定义的__global__ void function
support.h中没有和刚刚调用函数相关的任何语句
【解决过程】
首先考虑:“头文件的重复包含”,也就是在两个源文件里都写了同一个头文件time.h
其他原因
最终解决:
全局变量/函数的声明在support.h里extern,
extern __global__ void function
在.cpp/.cu里进行函数定义。
__global__ void function(){}
(未使用)解决方案则是在属性-链接-命令行中添加 /force:multiple,强制允许多重定义,则编译的时候会自动忽略第二个定义。
error LNK1561: 必须定义入口点
每个应用程序(文件格式为exe)都应该有个启动点,这个点就是main函数。缺少就会出现link error 。
解决方法
方法一 添加含有main函数的CPP文件
方法二 右击属性,在常规项中修改配置类型,将应用程序修改为库,动静态库
无法查找或打开PDB文件
当程序在 VS 上编译时,程序所依赖的所有动态链接库(dll 文件)也会被编译,编译过程中每个 dll 都会产生一个pdb文件,又称为“符号文件”,是一个存储数据的信息文件,其包含 dll 库在编译过程的某些调试信息,例如程序中所用到的全局变量、局部变量、函数名以及他们的入口地址等。
pdb 文件主要用于调试程序,多用于当VS中有多个项目,且项目之间互有依赖关系时,使用pdb文件调试程序,往往会事半功倍,初学者一般不会用到。
当使用VS 调试程序时,会默认加载你的程序以及程序依赖的dll库产生的所有pdb文件,但是结果往往是VS自己找不到依赖库的pdb文件,于是就提示给你“无法查找或打开pdb文件”。
【解决过程】
-
选择菜单栏中的“调试 --> 选项”,如下图所示:
-
弹出“选项”对话框后,选择“调试 --> 常规”,在右侧选项栏中勾选“启用源服务器支持”(包含的 3 个子选项不用勾选),此时会弹出一个安全警报框,选择“是”即可,如下图所示:
-
还是在“选项”对话框中,选择“调试 --> 符号”,在右侧选项栏中勾选“Microsoft符号服务器”,此时会弹出一个提示对话框,点击“确定”即可。同时,对于缓存符号的目录,选择图示中的目录即可:
-
确定之后,重新运行你的程序,首次运行时,由于编译器会加载所有动态链接库的pdb文件,可能会等到几秒钟。程序运行后,之前输出窗口中的“无法查找或打开pdb文件”的提示不见了。
未加载mfc120ud.i386.pdb
在单步调试的时候,弹出了反汇编窗口和这一提示。
搜索得到的处理方式为:
pdb是用来调试的符号文件 加载dll时没有找到对应的pdb就会有这种提示 是正常的
如果你不需要调试这些runtime的动态库的话 直接忽略这些提示就行 反之 你需要在vs里配置符号服务器来获取这些动态库的dll
配置方法搜索 Microsoft Symbol Server 这个关键字
于是我直接运行了程序,结果正确 =L=
可忽略的报错系列
调用核函数时(Error:应输入表达式)
错误出现在.cu文件中。这个错误可以忽略。原因是编译器按照C++语法提示错误。
错误出现在.cpp文件中。在.cpp文件中不可以直接使用<<<>>>,应该用extern “C” 声明。
texture不是模板、tex2D未定义、__syncthreads 未定义
只是不识别而已
缺少头文件系列
cutil.h cutil_inline.h
新版本没有这两个头文件,删除/注释即可
mex.h
CUDA运行无法打开: “helper_cuda.h”
添加默认安装的地址为 C:\ProgramData\NVIDIA Corporation\CUDA Samples\v9.1\common\inc 即可。
<helper_string.h>,<helper_cuda.h>和<helper_functions.h>等找不到均可使用此解决办法。