VS2015下CUDA代码编译异常的一点小问题解决方法
安装了 VS2015后,下载了CUDA 8.0安装,试了一个.cu文件编译正常通过,
继续安装了一个Intel parallel_studio_xe_2016, 然后使用 Intel 的C++编译器进行编译,结果nvcc编译.cu文件时候报错,一些c++库的头文件解析不通过,
网上搜索了一下,没有找到解决方法。
自己对比了一下使用VS 的C++编译器和 Intel 的C++编译器时,在控制台输出的nvcc命令,发现 –cl-version 参数值不同
使用VS2015的C++编译器时,出现的参数是 –cl-version 2015
而使用Intel的C++编译器时,出现的参数是 –cl-version 2010
进一步查找CUDA的自定义编译配置,在 Program Files(x86)\MSBuild\Microsoft.Cpp\v4.0\v140\BuildCustomizations\ 目录下的 CUDA 8.0.props 中对编译器做了检查,
... <CudaClVerson Condition="'$(PlatformToolset)' == 'v140'">2015</CudaClVersion> <CudaClVersion Condition="'$(CudaClVersion)' == ''">2010</CudaClVersion> ...
CUDA的自定义编译配置中没有对Intel C++编译器做判断处理,自己修改下面那个为空时默认为2010的行,
将2010修改为2015,保存后重新编译,两个编译器都可以编译通过,问题解决。
Popularity: 12% [?]
Random Posts
编译tesseract-ocr碰到的问题以及解决方法
下载地址 https://github.com/tesseract-ocr/tesseract
首先下载了 tesseract-master 版本,
解压后运行 ./autogen.sh 提示 libtoolize: command not found
使用yum install libtool 安装缺少的命令,重新运行 ./autogen.sh, 成功生成 configure 文件,
运行 ./configure 提示需要C++11版本的编译器,不想升级系统自带的gcc版本
重新下载 https://github.com/tesseract-ocr/tesseract ,切换tag,选择 3.0.5分支,下载 tesseract-3.05.zip
unzip tesseract-3.05.zip 解压后,运行./autogen.sh生成configure文件
运行./configure 提示 leptonica not found
到 http://www.leptonica.org/download.html 下载安装包,目前最新版本为 leptonica-1.74.1.tar.gz
tar -xzvf leptonica-1.74.1.tar.gz
cd leptonica-1.74.1
./configure
./make
./make install
重新回到 tesseract-3.05目录下,
./configure
./make
./make install
安装完成
接着需要数据文件,到 https://github.com/tesseract-ocr/tessdata
按照提示,不下载master数据,切换到 tag/3.04.00 分支下下载数据文件,
下载完成后,将 eng开头的9个文件拷贝到 /usr/loca/share/tessdata目录下
Popularity: 11% [?]
Random Posts
Clion遇到Out Of Memory问题的解决方法
运行已久的Clion环境突然提示Out of Memory,跳出程序,重新打开,项目加载完成后过一会又是Out of Memory崩掉,查看系统内存,还有很多,不是系统内存不够的原因。
将运行路径下的 clion64.exe.vmoptions 内容
-Xms256m -Xmx2000m -XX:NewSize=128m -XX:MaxNewSize=128m
修改为
-Xms256m -Xmx4000m -XX:NewSize=256m -XX:MaxNewSize=256m
将设置的值放大一倍后,重新启动Clion,在加载项目完成后,建立索引和符号时没有再出现Out of Memory错误崩溃
Popularity: 11% [?]
Random Posts
MySQL Connector++ 使用getString获取表字段数据出错
Linux下一个使用MySQL Connector++ 1.1.0 连接MySQL数据库的程序,在连接数据库获取数据时程序崩溃,
确定数据库中存在记录值,查看Core Dump文件,发现崩溃点发生在调用 MySQL 库的 getString 方法时的那一行,
通过google搜索,发现好一些getString出错的问题,但是多数是Windows下VS编译环境不同造成的,终于发现下面一篇中有和我的问题类似
http://stackoverflow.com/questions/4822958/mysql-c-connector-getstring-doesnt-work-correctly-while-getint-works-perfe
I had a similar problem the program would give a memory exception. Here is what I did to fix it: std::string version = result->getString( COLUMN_NAME ).c_str(); This didn't work: sql::SQLString sString = result->getString( COLUMN_NAME ); <<我的不正常代码是
std::string value = result->getString( field);按照上面的方法将代码修改为
std::string value = result->getString( field).c_str();暂时获取同样的数据没有出错,希望后面也不要出错。
MySQL Connector++ 从版本1.1.4开始编译依赖于BOOST库Popularity: 10% [?]
Random Posts
libcurl请求速度慢问题解决
一直使用libcurl请求接口数据,最近发现一个问题,post部分请求速度变慢,每次都要超过一秒,get速度没有变化,0.1秒左右获取完毕。
对POST请求打开VERBOSE开关,看到发出请求头信息包含 Expect: 100-Continue, 网上查找对应说明,当POST数据大于1024字节时,
有这个头信息会先等待服务端一个继续接受的应答才继续上传,如果服务端没有应答会等待1秒再继续上传后续数据,对照VERBOSE输出的信息,
发现发出的Content-Length 大小1026字节,刚好超出1024字节,服务端没有对100-Continue做应答于是libcurl多等了1秒才发送数据。
修改方法,让libcurl不处理Expect 头信息
/* 添加头信息 */ struct curl_slist *list = NULL; list = curl_slist_append(list, "Expect: "); /* 设置头信息 */ curl_easy_setopt(curl, CURLOPT_HTTPHEADER, list); … curl_slist_free_all(list); /* 释放头信息 */添加这段代码后,再次请求,时间降到0.x秒内,速度正常
Popularity: 10% [?]
Random Posts
Klocwork Insight在Mac下的eclipse插件安装使用
搞到一套可以在mac下运行的klocwork insight,终于在不开虚拟机的情况下也可以做c/c++代码的静态检查了。
首先安装服务端,双击运行服务端安装包的 pkg文件,安装后会自动建立 /usr/local/kw/ 符号连接,
再安装客户端,解压客户端的zip压缩包,得到cmd安装包盒eclipse的update site。双击运行cmd客户端安装包的pkg文件进行安装。使用eclipse的install site将eclipse插件装好,
修改eclipse中的 c++项目build属性
1. 选中项目,鼠标右击,转到 Project Properties > C/C++ Build > Tool Chain Editor.
2. 将活动配置的 Current Builder 从 CDT Internal Builder 修改为 Gnu Make Builder 并点击 Apply .
3. 选中项目,鼠标右击,转到 Project Properties > C/C++ Build.
4. 在Builder Settings 标签页, 取消选中 Use default build command.
5.在 Build command 输入框中,将原先的 make 修改为kwinject -u -o ${ProjDirPath}/kwinject.out make注意:要将之前安装的路径添加到PATH中,否则会报kwinject命令找不到的错误
6. 点击 OK 按钮确定修改首先 clean project, 然后再build project这样就创建好了klocwork的 Build specification。
7. 选中项目,鼠标右击,转到 Project Properties – > Klocwork > Clockwork Build Settings.
8. 选中 Use build specification file, 浏览选中刚创建的 build specification 文件 ( kwinjec.out ), 然后点击 OK.后面就可以使用klocwork分析C++代码中存在的问题了。
命令行下运行
kwadmin create-project myproject cd myprojectpath make clean kwinject make kwbuildproject --project myproject -f -o table kwinject.out kwadmin load myproject table在客户端分析
首先进入到项目所在的路径(工程所在的路径下)
1. 创建本地项目名
kwcheck create 会在当前目录下生成一个 .kwlp .kwps 的目录,用来存放数据和配置文件的
2. 获取构建配置文件
kwbuildproject –project myproject -f -o table kwinject.out用命令分析并查看结果
kwcheck run –b kwinject.out这时缺陷是不能在 web 中查看的但可以导出 txt 和 xml 格式的文件,命令为:
kwcheck list -F xml > report.xml
kwcheck list -F detailed > report.txtPopularity: 10% [?]
Random Posts
使用Insure编译代码出现Warning: unable to instrument “xxx.cpp” (4) compiling original source code
使用Insre工具做代码的内存泄露检查,编译代码时发现提示 Warning: unable to instrument “xxx.cpp” (4) compiling original source code,没有能正常插桩, 对代码逐步分析排除问题后,发现是代码中使用了 jsoncpp 库,Insure编译时对jsoncpp的头文件没有能处理好,只要引用到了json.h的代码文件,都出现了 Warning: unable to instrument 的提示。
逐个尝试修改jsoncpp的头文件做分析,最后发现只要修改jsoncpp的 value.h 文件,
将 class JSON_API value 类下面private: #ifndef JSONCPP_DOC_EXCLUDE_IMPLEMENTATION # ifndef JSON_VALUE_USE_INTERNAL_MAP class CZString {的private:修改为public:变为
public: #ifndef JSONCPP_DOC_EXCLUDE_IMPLEMENTATION # ifndef JSON_VALUE_USE_INTERNAL_MAP class CZString {后,重新使用Insure编译,正常插桩,编译通过,未再提示 warning: unable to instrument 错误。
Popularity: 10% [?]
Random Posts
浅尝内存泄露检查工具Insure++在Linux_X64平台下得使用
首先安装Insure++, 按照说明展开安装文件install后,运行.install进行安装,一路默认值下去安装成功
使用:第一步
修改profile文件,将insure的bin路径添加到PATH中
export PATH=$PATH:~/insure/bin第二步
重新建立终端连接,到项目目录下检查修改Makefile文件
如果直接使用g++的,需要修改每一个g++为 insure g++
还好我是使用的CXX=g++方式,需要insure编译时只要在执行命令的时候使用make CXX="insure g++"即可,不用修改文件,就可以方便切换insure++编译版本和非Insure++编译版本
重新编译前,要先执行make clean做目录清理
第三步
运行编译后得程序,做内存泄露检查,呵呵一下看到一堆提示,慢慢研究提示信息含义。
后续代码效率、覆盖等功能等待进一步研究。使用insure++编译过程中碰到的一个问题
所有文件编译完成后,在最后链接阶段提示/usr/bin/ld: cannot find -ldl这个在未使用insure++编译前,是没有出现这个错误得,
首先尝试修改 ~/insure/.psrc 文件,添加了insure++.static_linking on开关行,使用静态编译方式,结果链接时出现缺少一些inusre目录下得.a, .o文件,行不通
继续网上搜索,发现是少了符号链接 /usr/lib64/libdl.so,添加符号链接ln -s /lib64/libdl.so.2 /usr/lib64/libdl.so重新编译连接,问题消失,可以正常编译链接。
Popularity: 9% [?]
Random Posts
初试Coverity对C++代码的静态检查
之前一直在使用一个版本的goanna做C++静态代码,前两天搞到一套Coverity,尝试安装了一下,发现Coverity检查功能还是挺强大,之前goanna未检查出得一些问题它检查出来了,比如
if ((x & 0×80) == 1)) {
}
这么一个判断代码,之前的goanna就没有报出问题,这个Coverity就报出了一个无效语句的问题,一下子发现等于的判断条件写错了。
Coverity的简单使用流程
第一步, 使用 cov-build 捕获代码Build过程涉及到得文件./cov-build --dir . make第二步, 使用 cov-analysis 对捕获的结果做代码分析(分析在cov-build步骤捕获到得相关代码文件)
./cov-analysis --dir .第三步, 使用 cov-format-errors 输出html格式的分析结果,方便查看出问题得代码位置做代码修订。(这一步也可以使用 cov-commit-defects 提交分析结果到中心服务器,没有安装 platform 没有做效果尝试)
./cov-format-errors --dir . --html-output ./html打开html目录下的 index.html 即可查看分析结果。
Popularity: 9% [?]
Random Posts
Libevent库静态编译方法
1. 首先通过configure设置关闭动态编译,打开静态编译
./configure –disable-shared –enable-static可以比较默认编译选项和做如上设置的编译后的文件大小比较,
sample目录下,静态编译的可执行文件使用strip后,http-server 为140kb,动态库方式的为20kb左右.2. 在链接时要添加 -lrt 这个库,否则会提示缺少函数符号clock_gettime
gcc testev.c -I../libevent/include/ -levent -L ../libevent/lib/ -lrtPopularity: 9% [?]
Random Posts