2015-10-16 84 views
2

我在这个问题上摸不着头脑。如何在家里,在Ubuntu上重现 CRAN's gcc ubsan tests of my package的结果? (在准备步骤的指示来自here在ubuntu上重现CRAN GCC-UBSAN测试结果“在家”

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 

但是我没有得到和cran一样的bug报告(参见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 

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

回答

2

另外的现成解决方案似乎可以用r-hub package/service,在类似的方式devtools::check()工作,你只需要运行

rhub::check_with_sanitizers() 
+0

这是最简单的方法 – user189035

+0

当我编写答案时,这当然是不可用的......但至少容器帮助Gabor建立r-hub。 –

2

这是可行的,但相当一些工作。而且它也是docker非常适合的主要人选。所以,我创建了两个不同的Docker容器:

相应的泊坞窗图像上the Docker hub准备好您的下载。我也写了一个longer blog post about this for UBSAN

+0

我不知道我做错了。输入'docker run --rm -ti -v $(pwd):/ mnt rocker/r-devel-ubsan-clang check.r --setwd/mnt --install-deps RcppAnnoy_0.0.5.tar.gz'来自博客帖子我得到了''下载的源代码包在 \t'/ tmp/downloaded_pa​​ckages' 警告:'RcppAnnoy_0.0.5.tar.gz'既不是文件也不是目录,跳过' – user189035

+0

也许使用'/ bin/bash'为一个shell并手工运行'RD CMD check ...'。 –

+0

(我的意思是,我得到'* DONE(RcppAnnoy) 下载的源包在 \t '的/ tmp/downloaded_pa​​ckages' 警告: 'RcppAnnoy_0.0.5.tar.gz' 既不是一个文件也不是目录,skipping') – user189035