关于vs2012+caffe配置中出现的"常量中的字符太多"错误的解决办法
2015-12-14 17:08
921 查看
转自http://blog.csdn.net/thystar/article/details/49785551
解决问题的关键:CUDA的版本要换成6.5及以下的版本
在网上发现有很多人都提出这个问题,这里说明一下问题的原因及解决方法
说一下配置库,
我是从http://download.csdn.net/detail/thesby/8411969#comment下载的
我的配置环境:
VS2012
cuda7.0;
在编译代码过程中,遇到如下错误信息:
[cpp] view
plaincopy
<span style="color:#330033;">1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5762): error C2015: 常量中的字符太多</span>
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5762): error C2146: 语法错误: 缺少“)”(在标识符“q”的前面)
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5762): error C2059: 语法错误:“)”
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5762): error C2001: 常量中有换行符
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5775): error C2143: 语法错误 : 缺少“)”(在“{”的前面)
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5775): error C2143: 语法错误 : 缺少“;”(在“{”的前面)
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5775): error C2447: “{”: 缺少函数标题(是否是老式的形式表?)
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5775): error C2015: 常量中的字符太多
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5783): error C2015: 常量中的字符太多
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5783): error C2059: 语法错误:“)”
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5783): error C2143: 语法错误 : 缺少“;”(在“}”的前面)
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5793): error C2015: 常量中的字符太多
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5793): error C2018: 未知字符“0x60”
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5793): error C2143: 语法错误 : 缺少“)”(在“常量”的前面)
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5793): error C2017: 非法的转义序列
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5793): error C2059: 语法错误:“)”
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5793): error C2001: 常量中有换行符
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5800): error C2143: 语法错误 : 缺少“)”(在“{”的前面)
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5800): error C2143: 语法错误 : 缺少“;”(在“{”的前面)
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5800): error C2447: “{”: 缺少函数标题(是否是老式的形式表?)
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5800): error C2015: 常量中的字符太多
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5811): error C2015: 常量中的字符太多
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5811): error C2059: 语法错误:“)”
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5811): error C2017: 非法的转义序列
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5811): error C2001: 常量中有换行符
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5817): error C2143: 语法错误 : 缺少“)”(在“{”的前面)
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5817): error C2143: 语法错误 : 缺少“;”(在“{”的前面)
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5817): error C2447: “{”: 缺少函数标题(是否是老式的形式表?)
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5817): error C2015: 常量中的字符太多
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5817): error C2017: 非法的转义序列
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5817): error C2001: 常量中有换行符
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5828): error C2015: 常量中的字符太多
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5828): error C2017: 非法的转义序列
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5838): error C2015: 常量中的字符太多
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5838): error C2017: 非法的转义序列
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5846): error C2015: 常量中的字符太多
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5846): error C2017: 非法的转义序列
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5846): error C2001: 常量中有换行符
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5854): error C2015: 常量中的字符太多
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5854): error C2001: 常量中有换行符
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5862): error C2015: 常量中的字符太多
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5868): error C2015: 常量中的字符太多
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5868): error C2017: 非法的转义序列
1>tmpxft_00001664_00000000-2_bnll_layer.cudafe1.stub.c(4): fatal error C1004: 发现意外的文件尾
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V110\BuildCustomizations\CUDA 7.0.targets(593,9): error MSB3721: 命令“"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.0\bin\nvcc.exe" -gencode=arch=compute_30,code=\"sm_30,compute_30\" --use-local-env --cl-version 2012 -ccbin "C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\x86_amd64" -I../../3rdparty/include -I../../3rdparty/include/eigen3/Eigen -I../../src -I../../include -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.0\include" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.0\include" --keep-dir x64\Debug -maxrregcount=0 --machine 64 --compile -cudart static -g -D_VARIADIC_MAX=10 -DWIN32 -D_DEBUG -D_CONSOLE -D_MBCS -Xcompiler "/EHsc /W3 /nologo /Od /Zi /RTC1 /MDd " -o Debug\bnll_layer.cu.obj "F:\Caffe demo0\src\caffe\layers\bnll_layer.cu"”已退出,返回代码为 2。
========== 全部重新生成: 成功 0 个,失败 1 个,跳过 0 个 ==========
第一个代码错误处,
[cpp] view
plaincopy
extern "C" const __declspec(selectany) GUID SchedulerEventGuid = { 0xE2091F8A, 0x1E0A, 0x4731, { 0x84, 0xA2, 0x0D, 0xD5, 0x7C, 0x8A, 0x52, 0x61 } };
找到原始的GUID的定义:
[cpp] view
plaincopy
struct _GUID {
unsigned long Data1;
unsigned short Data2;
unsigned short Data3;
unsigned char Data4[8];
} GUID;
可以发现,错误提示的文件是:
[cpp] view
plaincopy
bnll_layer.cu
文件,编译发现,文件夹下所有的.cu编译都出现同样的错误
就此,我们在cuda下运行其自带的simple0项目,发现报出同样的错误,在其中任意一个.cu文件下右击属性,在cuda C++的命令行配置下添加如下命令
--verbose --keep
编译;
输出中间文件;在其对应的生成位置,我们发现如下代码:其编码方式是utf-8
[html] view
plaincopy
extern "C" { __declspec(selectany) extern const GUID SchedulerEventGuid = {3792248714UL, ((unsigned short)7690U), ((unsigned short)18225U), {((unsigned char)'ħ), ((unsigned char)'§), ((unsigned char)'\r'), ((unsigned char)'է), ((unsigned char)'|'), ((unsigned char)'ʧ), ((unsigned char)'R'), ((unsigned char)'a')}}; }
可以看出,与原始的GUID的定义不同,其核心原因是VC无法读取utf8编码的源文件,
' '中的部分被强制转换,导致出现常量中字符太多。
结决方法其实很简单,使用cuda6.5即可;
我们在来看一下cuda6.5生成的中间文件:
[cpp] view
plaincopy
extern "C" { __declspec(selectany) extern const GUID SchedulerEventGuid = {(3792248714U), (7690), (18225), {(132), (162), (13), (213), (124), (138), (82), (97)}}; }
符合定义的标准;
因此,caffe在windows下cuda使用6.5和6.0版本的;
问题的到解决,编译通过
解决问题的关键:CUDA的版本要换成6.5及以下的版本
在网上发现有很多人都提出这个问题,这里说明一下问题的原因及解决方法
说一下配置库,
我是从http://download.csdn.net/detail/thesby/8411969#comment下载的
我的配置环境:
VS2012
cuda7.0;
在编译代码过程中,遇到如下错误信息:
[cpp] view
plaincopy
<span style="color:#330033;">1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5762): error C2015: 常量中的字符太多</span>
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5762): error C2146: 语法错误: 缺少“)”(在标识符“q”的前面)
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5762): error C2059: 语法错误:“)”
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5762): error C2001: 常量中有换行符
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5775): error C2143: 语法错误 : 缺少“)”(在“{”的前面)
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5775): error C2143: 语法错误 : 缺少“;”(在“{”的前面)
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5775): error C2447: “{”: 缺少函数标题(是否是老式的形式表?)
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5775): error C2015: 常量中的字符太多
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5783): error C2015: 常量中的字符太多
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5783): error C2059: 语法错误:“)”
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5783): error C2143: 语法错误 : 缺少“;”(在“}”的前面)
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5793): error C2015: 常量中的字符太多
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5793): error C2018: 未知字符“0x60”
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5793): error C2143: 语法错误 : 缺少“)”(在“常量”的前面)
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5793): error C2017: 非法的转义序列
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5793): error C2059: 语法错误:“)”
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5793): error C2001: 常量中有换行符
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5800): error C2143: 语法错误 : 缺少“)”(在“{”的前面)
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5800): error C2143: 语法错误 : 缺少“;”(在“{”的前面)
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5800): error C2447: “{”: 缺少函数标题(是否是老式的形式表?)
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5800): error C2015: 常量中的字符太多
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5811): error C2015: 常量中的字符太多
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5811): error C2059: 语法错误:“)”
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5811): error C2017: 非法的转义序列
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5811): error C2001: 常量中有换行符
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5817): error C2143: 语法错误 : 缺少“)”(在“{”的前面)
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5817): error C2143: 语法错误 : 缺少“;”(在“{”的前面)
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5817): error C2447: “{”: 缺少函数标题(是否是老式的形式表?)
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5817): error C2015: 常量中的字符太多
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5817): error C2017: 非法的转义序列
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5817): error C2001: 常量中有换行符
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5828): error C2015: 常量中的字符太多
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5828): error C2017: 非法的转义序列
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5838): error C2015: 常量中的字符太多
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5838): error C2017: 非法的转义序列
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5846): error C2015: 常量中的字符太多
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5846): error C2017: 非法的转义序列
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5846): error C2001: 常量中有换行符
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5854): error C2015: 常量中的字符太多
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5854): error C2001: 常量中有换行符
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5862): error C2015: 常量中的字符太多
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5868): error C2015: 常量中的字符太多
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\concrt.h(5868): error C2017: 非法的转义序列
1>tmpxft_00001664_00000000-2_bnll_layer.cudafe1.stub.c(4): fatal error C1004: 发现意外的文件尾
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V110\BuildCustomizations\CUDA 7.0.targets(593,9): error MSB3721: 命令“"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.0\bin\nvcc.exe" -gencode=arch=compute_30,code=\"sm_30,compute_30\" --use-local-env --cl-version 2012 -ccbin "C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\x86_amd64" -I../../3rdparty/include -I../../3rdparty/include/eigen3/Eigen -I../../src -I../../include -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.0\include" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.0\include" --keep-dir x64\Debug -maxrregcount=0 --machine 64 --compile -cudart static -g -D_VARIADIC_MAX=10 -DWIN32 -D_DEBUG -D_CONSOLE -D_MBCS -Xcompiler "/EHsc /W3 /nologo /Od /Zi /RTC1 /MDd " -o Debug\bnll_layer.cu.obj "F:\Caffe demo0\src\caffe\layers\bnll_layer.cu"”已退出,返回代码为 2。
========== 全部重新生成: 成功 0 个,失败 1 个,跳过 0 个 ==========
第一个代码错误处,
[cpp] view
plaincopy
extern "C" const __declspec(selectany) GUID SchedulerEventGuid = { 0xE2091F8A, 0x1E0A, 0x4731, { 0x84, 0xA2, 0x0D, 0xD5, 0x7C, 0x8A, 0x52, 0x61 } };
找到原始的GUID的定义:
[cpp] view
plaincopy
struct _GUID {
unsigned long Data1;
unsigned short Data2;
unsigned short Data3;
unsigned char Data4[8];
} GUID;
可以发现,错误提示的文件是:
[cpp] view
plaincopy
bnll_layer.cu
文件,编译发现,文件夹下所有的.cu编译都出现同样的错误
就此,我们在cuda下运行其自带的simple0项目,发现报出同样的错误,在其中任意一个.cu文件下右击属性,在cuda C++的命令行配置下添加如下命令
--verbose --keep
编译;
输出中间文件;在其对应的生成位置,我们发现如下代码:其编码方式是utf-8
[html] view
plaincopy
extern "C" { __declspec(selectany) extern const GUID SchedulerEventGuid = {3792248714UL, ((unsigned short)7690U), ((unsigned short)18225U), {((unsigned char)'ħ), ((unsigned char)'§), ((unsigned char)'\r'), ((unsigned char)'է), ((unsigned char)'|'), ((unsigned char)'ʧ), ((unsigned char)'R'), ((unsigned char)'a')}}; }
可以看出,与原始的GUID的定义不同,其核心原因是VC无法读取utf8编码的源文件,
' '中的部分被强制转换,导致出现常量中字符太多。
结决方法其实很简单,使用cuda6.5即可;
我们在来看一下cuda6.5生成的中间文件:
[cpp] view
plaincopy
extern "C" { __declspec(selectany) extern const GUID SchedulerEventGuid = {(3792248714U), (7690), (18225), {(132), (162), (13), (213), (124), (138), (82), (97)}}; }
符合定义的标准;
因此,caffe在windows下cuda使用6.5和6.0版本的;
问题的到解决,编译通过
相关文章推荐
- JavaScript在IE浏览器和Firefox浏览器中的差异总结
- js判断页面是什么设备打开的
- bootstrap的验证和确认对话框
- Kindeditor 4.1.10 JSP Firefox 报上传错误
- js如何实现一定时间后去执行一个函数
- 分享一个本人开发的angularjs+bootstrap+Spring+mybatis实现的java web系统项目
- CSS3选择器使用小结
- jsp session 用法
- jsp与jspx文件
- jquery dwn 开发学习
- js 异步上传图片 限制图片的格式大小
- jquery.cookie 使用方法
- 探究JavaScript函数式编程的乐趣
- 《avascript 高级程序设计(第三版)》 ---第一章 Javascript简介
- JSON中使用JArray.Parse
- 简单的 JavaScript 类继承框架
- MySQL 远程连接(federated存储引擎)
- 使用JSONP进行跨域请求
- JS 面向对像编程(归纳与总结)
- swiper.js完美的解决触摸滑动效果