在家中复制CRAN GCC-UBSAN测试结果'在ubuntu上

时间:2015-10-16 20:17:18

标签: r ubuntu cran

我在这个问题上摸不着头脑。如何重现  ubuntu上的CRAN's gcc ubsan tests of my package在家里的结果? (准备步骤的说明来自here

1)我安装 - 更新所有需要的软件包:

apt-get update
apt-get install bash-completion bison debhelper default-jdk g++ gcc gfortran groff-base libblas-dev libbz2-dev libcairo2-dev libcurl4-openssl-dev libjpeg-dev liblapack-dev liblzma-dev libncurses5-dev libpango1.0-dev libpcre3-dev libpng-dev libreadline-dev libtiff5-dev libx11-dev libxt-dev mpack subversion tcl8.5-dev texinfo texlive-base texlive-extra-utils texlive-fonts-extra texlive-fonts-recommended texlive-generic-recommended texlive-latex-base texlive-latex-extra texlive-latex-recommended tk8.5-dev valgrind x11proto-core-dev xauth xdg-utils xfonts-base xvfb zlib1g-dev

2)使用所需选项构建Rdevel:

cd /tmp
svn co http://svn.r-project.org/R/trunk R-devel 
cd /tmp/R-devel 
R_PAPERSIZE=letter R_BATCHSAVE="--no-save --no-restore" PAGER=/usr/bin/pager  PERL=/usr/bin/perl  R_UNZIPCMD=/usr/bin/unzip  R_ZIPCMD=/usr/bin/zip  R_PRINTCMD=/usr/bin/lpr  LIBnn=lib  AWK=/usr/bin/awk  CFLAGS="-pipe -std=gnu99 -Wall -pedantic -O2"  CXXFLAGS="-pipe -Wall -pedantic -O2"  CC="gcc -fsanitize=address,undefined"  CXX="g++ -fsanitize=address,undefined"  CXX1X="g++ -fsanitize=address,undefined"  FC="gfortran -fsanitize=address,undefined"  F77="gfortran -fsanitize=address,undefined" ./configure --enable-R-shlib --without-blas --without-lapack --with-readline --without-recommended-packages --program-suffix=dev --disable-openmp 
make 
make install 
make clean

3)最后,使用as-cran标志在本地构建/编译所述包:

wget https://cran.r-project.org/src/contrib/FastRCS_0.0.6.tar.gz
tar -xvzf FastRCS_0.0.6.tar.gz
Rdevel CMD check --as-cran FastRCS

但我没有得到与颅相同的错误报告(见here)。我的意思是这个例子:

/usr/local/gcc5/lib/gcc/x86_64-unknown-linux-gnu/5.2.0/include/emmintrin.h:140:21: runtime error: load of misaligned address 0x61800007fc84 for type 'const double', which requires 8 byte alignment
0x61800007fc84: note: pointer points here
  00 00 80 3f 00 00 80 3f  00 00 80 3f 00 00 80 3f  00 00 80 3f 00 00 80 3f  00 00 80 3f 00 00 80 3f

我使用的脚本有什么问题?

3 个答案:

答案 0 :(得分:3)

这是可行的,但相当一些工作。它也是docker 非常有用的东西的主要候选者。所以我创建了两个不同的Docker容器:

相应的Docker镜像在the Docker hub上,可供您下载。

我还写了一个longer blog post about this for UBSAN

答案 1 :(得分:3)

另一个开箱即用的解决方案似乎是使用r-hub package / service,其工作方式与devtools::check()类似,您只需要运行

rhub::check_with_sanitizers()

答案 2 :(得分:1)

您还可以在本地使用R-hub Docker映像,尤其是thanks to helper functions of the rhub package。但是,这些功能在Windows上尚无法使用。

免责声明:我是rhub软件包的贡献者。