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: 1% [?]

Random Posts

CentOS 6下Android SDK碰到提示”libc.so.6: version `GLIBC_2.14′ not found”的解决方法

在CentOS 6的机器上安装了Android的开发环境,碰到如下一些问题和解决方法
1. Android Studio 添加Android SDK时,提示缺少JDK 1.5、JDK 1.6 或 JDK 1.7, 但是机器上已经安装好JDK 1.6, JDK 1.7,还是提示同样的问题
解决方法,软件的提示信息Bug,其实是缺少 JDK 1.8(这个提示Bug应该会在后续版本被修订), 下载安装JDK 1.8,添加JDK 1.8后,再添加Android SDK,一切正常。

2. 新建一个简单Android项目,编译,提示”libc.so.6: version `GLIBC_2.14′ not found” 的错误信息
下载使用的是Android SDK Ver 25.2.5 Platform Tools Ver 25.0.3 Build Tools Ver 25.0.2
google搜索,确认是libc库的版本低的原因,CentOS 的libc版本文v2.14 要CentOS 7 才有支持 GLiBC_2.14,
解决方法要么重装系统使用CentOS 7, 要么逐个试验降低SDK版本,直到可以不要GLIBC_2.14的可用SDK版本。
既不想重装系统到CentOS7, 也不想逐个往下试验低版本SDK,
搜索网络后找到一个解决方法,也就是在其他目录编译安装一个并行的glibc 2.14版本,然后使用LD_LIBRARY_PATH临时指定到这个新安装的libc目录

  1. wget http://ftp.gnu.org/gnu/glibc/glibc-2.14.tar.gz
  2. tar zxvf glibc-2.14.tar.gz
  3. cd glibc-2.14
  4. mkdir build
  5. cd build
  6. ../configure –prefix=/opt/glibc-2.14
  7. make -j4
  8. sudo make install
  9. export LD_LIBRARY_PATH=/opt/glibc-2.14/lib

在同一个终端下执行原本会出现 libc.so.6: version `GLIBC_2.14′ not found 提示的 aapt 命令,结果正常运行
至此,以为大功告成了,同一终端下,执行打开IDE的命令,结果没有界面出现

继续尝试解决方案,
将原本aapt改名aapt_, 新建一个同名的aapt,写入如下bash脚本

  1. #!/bin/sh
  2. export LD_LIBRARY_PATH=/opt/glibc-2.14/lib && "$0"_ $@

添加执行权限,在命令行下试了一下可以正常执行,将其他几个命令做同样处理
新建一个终端窗口,打开IDE,正常,新建一个Android项目,编译正常,
到此,大功告成,在没有更换操作系统和降低Android SDK版本的情况可以进行Android开发了

—-华丽分割线—–
“libc.so.6: version `GLIBC_2.14′ not found” 提示产生的原因:
使用了高版本的libc库编译,

  1. objdump -T aapt |grep GLIBC_2.14

可以看到只有一个 memcpy 函数使用到了 GLIBC_2.14,
查看了一个CentOS目录下的应用,可以看到memcpy使用的是 GLIBC_2.2.5
如果自己拥有源码,可以添加如下一行代码,指定memcpy使用 GLIBC_2.2.5,使高版本编译出来的程序可以不做任何处理运行在低版本libc的系统上

__asm__(".symver memcpy,memcpy@GLIBC_2.2.5");

Popularity: 1% [?]

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: 2% [?]

Random Posts

使用CodeTyphon做FPC编译碰到的问题记录2

之前使用了CodeTyphon做FPC交叉编译,将Delphi写的部分命令行工具修改编译到Linux下运行,又碰到如下一些问题:
1. 重新安装后,不能Win64版本下编译生成x86_x64-linux的交叉编译相关包
解决方法:使用Win32版本编译生成x86_x64-linux交叉编译相关包

2. 代码文件中的中文字符,编译后运行显示乱码
原因,Delphi下写的代码是用GBK编码的,FPC高版本使用UTF8编码,格式转化失败
解决方法:在包含中文字符的代码文件最前面添加 {$codepage cp936} 指定源码文件的编码格式
编译再次碰到问题,提示cp936是不能识别 codepage
解决方法:检查CodeTyphon的fpcsrc目录下fpc编译器源码,
发现compiler/widestr.pas 文件中uses部分缺少cp936的引用,
修改该文件添加cp936的单元引用,
然后将 packages/rtl-unicode/src/inc/cp936.pas 文件拷贝一份到 rtl/charmaps目录下,
同时也修改rtl/charmaps/cpall.pas,添加cp936单元的引用
重新运行CodeTyphon安装程序,选择 4) Remove and Build FreePascal,
结束后,重新编译项目,再次在Linux下运行编译后的程序,中文可以正常显示了。
注: 修改后的文件,要添加/替换到 allzips/src/fpc_src.7z 中,否则重新编译时会自动被压缩包中解压出来的文件替换掉,导致修改失败

3.部分使用Hex格式传输的GBK中文字符,还原输出后显示为乱码
解决方法:对于还原回来的中文字符串,添加如下一个设置字符代码页的代码
SetCodePage(RawByteString(myStr), 936, false);
重新编译运行,问题解决。

4. 使用+号拼装中文字符串时,中文字符出现乱码,
解决方法,多写几个语句,拆分为单个+号连接
比如
Result := Result + ‘测试’ + sOther + ‘结束’;
修改为:
Result := Result + ‘测试’;
Result := Result + sOther;
Result := Result + ‘结束’;
问题解决。

Popularity: 2% [?]

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: 2% [?]

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: 2% [?]

Random Posts

    SQLite数据存取速度慢的原因分析

    写了一个小工具,使用SQLite作为本地数据结构的存取,但是在默认情况下,发现大批量插入数据的速度很慢,100条不到的记录,花了快10秒,没错不是毫秒,是秒,深感SQLite的存取速度太慢,现在很多软件都在使用SQLite作为本地数据存取,这么慢存取的效率怎么能用呢,估计是有什么参数没有设置对,网上搜索后发现如下一篇文章Increasing SQLite Performance
    文章主要是通过PRAGMA对一些参数设置不同值做效率对比

    方式 测试结果值 说明
    TEMP_STORE DEFAULT 235 不同值区别不大
    FILE 225
    MEMORY 215
     
    JOURNAL_MODE DELETE * 235 使用MEMORY和OFF方式速度较快
    TRUNCATE 210
    PERSIST 220
    MEMORY 65
    OFF 63
     
    SYNCHRONOUS FULL 235 OFF有较大提升
    NORMAL 175
    OFF 43
     
    LOCKING_MODE NORMAL 235 EXCLUSIVE独占有较大提升
    EXCLUSIVE 155

    另外 PAGE_SIZE 和 CACHE_SIZE 的只修改,对性能影响不是很明显,所以为了提升插入效率,在使用事物的基础上还可以通过修改 JOURNAL_MODE、SYNCHRONOUS和LOCKING_MODE的值

    PRAGMA locking_mode=EXCLUSIVE
    PRAGMA synchronous=0
    PRAGMA journal_mode=MEMORY
    

    Popularity: 2% [?]

    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 头信息

      1.   /* 添加头信息 */
      2.   struct curl_slist *list = NULL;
      3.   list = curl_slist_append(list, "Expect: ");
      4.  
      5.  /* 设置头信息 */
      6.   curl_easy_setopt(curl, CURLOPT_HTTPHEADER, list);
      7.   …
      8.   curl_slist_free_all(list); /* 释放头信息 */

      添加这段代码后,再次请求,时间降到0.x秒内,速度正常

      Popularity: 2% [?]

      Random Posts

        发现一个Delphi的静态代码检查工具FixInsight

        C++,Java, C#等常用编程语言都有静态代码检查工具,帮助发现编写代码过程中存在的一些问题,从而有效提升代码质量,将一些缺陷在编译阶段就发现解决掉。
        Delphi作为一个已经有几十年历史的语言,一直没有发现类似的静态代码检查工具,引以为憾,但是今天发现了一款工具 FixInsight 填补了这个缺憾。
        下载地址 http://sourceoddity.com/fixinsight/download.html
        软件的售价对于个人版只要 $95, 相对于排查代码缺陷所花的时间是完全值得的。

        Popularity: 2% [?]

        Random Posts

          使用CodeTyphon做FPC交叉编译的问题记录

          在mac下安装了CodeTyphon尝试做freepascal代码的跨平台编译。

          首先编译安装CodeTyphon环境

          步骤1:安装 mac ports
          步骤2:首先解压下载来的CodeTyphon安装包,运行解压目录下下的setup.sh, 使用 sudo 执行
          步骤3:选择0,安装系统库
          步骤4:选择8, 清空之前的全部组件,重新编译安装
          经过漫长等待后,可以在应用程序中看到有CodeTyphon和Typhon32两个图标,运行CodeTyphon

          编译所需目标平台的工具链

          主要是CrossBuild菜单项目下的几个菜单项处理。
          步骤1:选择 CrossBuild 菜单下面的 ToolChains Build 项目,选择期望的目标平台,主要是第一列的 FPC CPU-OS Targets 中选择, 选择好后点击 Build 按钮进行编译。在自己手动编译前可以先选择 CrossBuild 菜单下面的 Download ToolChains项目,看服务器上有无预先编译好的可可以下载来用(手工编译速度比下载速度慢很多)下载前,要用sudo 运行CodeTyphon, 否则会下载失败,提示目录不存在的错误,其实就是没有权限写目录
          步骤2:选择 CrossBuild 菜单下的 Download Libaraies 项目,下载对应目标平台的库文件
          步骤3:选择 CrossBuild 菜单下的 FreePascal 32bits(64bits), 编译所需平台的 cross elements,
          如果没有做第一步, 则这儿没有对应平台的cross elements可以选择

          编译目标平台的程序

          步骤1. 运行Typhon32
          步骤2. 新建或打开工程
          步骤3. 设置工程的相关搜索路径,菜单 工程=》工程选项=》编译选项=》路径, 主要为Libraries路径,为了变更目标平台时不修改这边的路径,可以采用相对路径。
          Libraries 可以填 $(CTDir)/binLibraries/$(TargetCPU)-$(TargetOS)
          单元输出目录可以填 lib/$(TargetCPU)-$(TargetOS)
          步骤4. 选择目标平台,菜单 工程=》工程选项=》Config and Target, 设置目标OS和目标CPU

          编译中碰到问题:
          问题1: 编译提示 system 单元未找到
          这一般是由于没有创建好对应平台的cross elements 或者 在工程的路径设置中没有设置对 units的路径

          问题2: 代码中的中文信息在编译后输出了乱码
          这个一般是由于Freepascal默认按照utf8解释的原因,之前代码中的中文是在Win下编写,GBK编码,将文件转为UTF8格式重新编译问题解决。

          Popularity: 2% [?]

          Random Posts

            Next Page →