跳转到内容

ROSE 编译器框架/虚拟机镜像

来自维基教科书,开放世界中的开放书籍

本页面的目标是记录

  • 用户如何下载虚拟机镜像(或虚拟设备)并开箱即用 ROSE。
  • 我们不再发布 VM,而是发布 Docker 镜像。

我们目前有三个虚拟机镜像

  • V4:我们不再提供适用于 Ubuntu 18.04 的 VM,因为安装过程非常简单。请遵循以下几行命令。
  • V3:最新的 VM 使用 Ubuntu 16.04(Xenial Xerus),安装了 ROSE,并使用 EDG 4.12 前端
  • V2:使用 Ubuntu 14.04(Trusty Tahr)和基于 EDG 4.x 前端的 ROSE 的 VM(不再维护)
  • V1:使用 Ubuntu 10.04(Lucid Lynx)和基于 EDG 3.x 前端的 ROSE 的非常旧的 VM(不再维护)

ROSE 编译器基础设施的 Docker 镜像

[编辑 | 编辑源代码]

在构建之前,您应该克隆此存储库并在您的计算机上安装 Docker。

Docker 安装说明

sudo apt update
sudo apt upgrade
sudo apt install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt update
     
sudo apt install docker-ce
# check if docker service is started
sudo systemctl status docker

创建您的 Docker 镜像

[编辑 | 编辑源代码]

您可以使用 Docker 创建和提供对 rose 参数的微调。您可以在以下链接中找到一个描述如何执行此操作的 GitHub 项目。

https://github.com/chunhualiao/rose-docker-image

如何下载镜像

[编辑 | 编辑源代码]

使用 rose 和 docker 的最简单方法是下载一个可直接使用的镜像(由 Gleison 构建)。您可以使用以下命令轻松访问镜像

sudo docker pull gleisonsdm/rose:latest

使用镜像

[编辑 | 编辑源代码]

下载镜像后,您可以将 rose 作为 Docker 上的微服务运行。使用该镜像的最简单方法是直接运行 bash 命令。您可以在我们的 Docker 镜像的 "/usr/rose/bin/" 中找到可执行的二进制文件。请使用以下命令行进行检查

sudo docker run --rm -it -v $(pwd):/root gleisonsdm/rose:latest ls /usr/rose/bin

然后,预期的输出是

ArrayProcessor			  interproceduralCFG
DataFaultToleranceTransformation  libtool
KeepGoingTranslator		  livenessAnalysis
astCopyReplTest			  loopProcessor
astRewriteExample1		  mangledNameDumper
autoPar				  measureTool
autoTuning			  moveDeclarationToInnermostScope
buildCallGraph			  outline
codeInstrumentor		  pdfGenerator
compassEmptyMain		  preprocessingInfoDumper
compassMain			  qualifiedNameDumper
compassVerifier			  rajaChecker
defaultTranslator		  rose-config
defuseAnalysis			  roseupcc
dotGenerator			  sampleCompassSubset
dotGeneratorWholeASTGraph	  summarizeSignatures
extractMPISkeleton		  typeforge
generateSignatures		  virtualCFG
identityTranslator

下一步是检查您的 Docker 镜像是否正常工作,您可以将 identityTranslator 作为测试运行在一个程序中。我们建议您运行一个 hello world,如下面的代码所示

#include <iostream>

int main() {
  std::cout << "Hello World!\n";
  return 0;
}

将此代码保存到名为 "main.cpp" 的文件中后,您可以直接运行 ROSE 实用程序,但不要忘记将本地路径[挂载](https://docs.docker.net.cn/storage/volumes/)到容器中。例如,以下命令运行带有 ROSE 的容器,将当前工作目录挂载到容器的 /root 中,并在 main.cpp 上执行 indetityTranslator 工具。生成的文件将存储在当前工作目录中,容器将由于 --rm 选项而被删除。

sudo docker run --rm -it -v $(pwd):/root gleisonsdm/rose identityTranslator -c main.cpp

最后,您的当前目录将包含以下列出的新文件

  • main.o
  • main.ti
  • rose_main.cpp

我们不再提供适用于 Ubuntu 18.04 的 VM,因为安装过程非常简单。请在以下位置查看几行命令:ROSE_Compiler_Framework/Installation#Instructions_for_Ubuntu_18.04

下载虚拟机镜像

  • http://www.rosecompiler.org/Ubuntu-ROSE-Demo-V3.tar.gz
  • 警告:这是一个 4.4 GB 的大文件(如果完全解压缩,则为 20.2 GB)。根据您的高速互联网连接速度,下载可能需要大约 1 小时。
  • 演示用户帐户(Ubuntu 中的 sudo 用户)
    • 帐户:demo
    • 密码:password

警告:由于 LLNL 对最大下载文件大小的限制,LLNL 用户可能无法下载它。在未经授权的情况下运行虚拟机也可能违反 LLNL 的安全策略。因此,此镜像不应在 LLNL 内部使用。


在 Windows 上,您可以安装 7-zip (http://www.7-zip.org/) 将 tar 包(.tar.gz 文件)解压缩到一个文件夹中。

  • 在台式电脑上,它可能需要大约 20 分钟才能完成两步解压缩(.tar.gz 到 .tar,然后 .tar 到文件夹)。
  • 最终文件夹的大小约为 20.2 GB。

demo@ubuntu:~$ cat readme

This is a Ubuntu 16.04 virtual machine with the ROSE Compiler installed.

cloned rose-develop on 2/22/2017
version 0.9.7.188

Directory List
~/rose-develop  : git clone https://github.com/rose-compiler/rose-develop
~/build-rose    : build tree of rose
~/opt/rose_inst : installation path of rose
~/tests         : a simple c file, processed by identityTranslator and dotGeneratorWholeASTGraph. 

type zgrviewer -f filename.dot to view a dot file of the AST graph

gcc-4.9.3 is the default gcc

---------- using ROSE ----------

To use the rose translator, you need to first setup the environment.
source ~/set.rose

---------- bashrc ----------

bash env in .bashrc has the following variables by default

# add jdk to PATH and LD_LIBRARY_PATH
PATH=/home/demo/opt/jvm/jdk1.7.0_51/bin:$PATH
LD_LIBRARY_PATH=/home/demo/opt/jvm/jdk1.7.0_51/jre/lib/amd64/server:/home/demo/opt/jvm/jdk1.7.0_51/lib:$LD_LIBRARY_PATH
# add boost to LD_LIBRARY_PATH
LD_LIBRARY_PATH=/home/demo/opt/boost/1.61.0/gcc-4.9.3-default/lib:$LD_LIBRARY_PATH
# create alias for zgrviewer
alias zgrviewer='/home/demo/opt/zgrviewer-0.10.0/run.sh'
export PATH LD_LIBRARY_PATH

---------- configuration of ROSE ----------

CC=/usr/bin/gcc-4.9 CXX=g++-4.9 FC=/usr/bin/gfortran-4.9
CXXFLAGS='-g -rdynamic -Wall -Wno-unused-local-typedefs -Wno-attributes' 
/home/demo/rose-develop/configure 
--enable-assertion-behavior=abort 
--prefix=/home/demo/opt/rose_inst 
--with-CFLAGS=-fPIC --with-CXXFLAGS=-fPIC 
--with-C_OPTIMIZE=-O0 --with-CXX_OPTIMIZE=-O0 
--with-C_DEBUG='-g -rdynamic' --with-CXX_DEBUG='-g -rdynamic' 
--with-C_WARNINGS='-Wall -Wno-unused-local-typedefs -Wno-attributes' 
--with-CXX_WARNINGS='-Wall -Wno-unused-local-typedefs -Wno-attributes' 
--with-ROSE_LONG_MAKE_CHECK_RULE=yes 
--with-boost=/home/demo/opt/boost/1.61.0/gcc-4.9.3-default 
--with-gfortran='/usr/bin/gfortran-4.9' 
--with-python='/usr/bin/python3' 
--with-java=/home/demo/opt/jvm/jdk1.7.0_51/bin/javac 
--enable-languages=all 
--enable-projects-directory 
--with-doxygen 
--without-sqlite3 
--without-libreadline 
--without-magic 
--with-yaml='/home/demo/opt/yaml/0.5.3/boost-1.61.0/gcc-4.9.3-default' 
--with-dlib='/home/demo/opt/dlib/18.18' 
--without-wt 
--without-yices 
--without-pch 
--enable-rosehpct 
--with-gomp_omp_runtime_library=/usr/lib/gcc/x86_64-linux-gnu/4.9/ 
--without-haskell
--enable-edg_version=4.12

make core
make install-core

安装说明

[编辑 | 编辑源代码]

安装过程遵循来自http://rosecompiler.org/ROSE_HTML_Reference/installation.html 的说明,但将 gcc 版本更改为 4.9.3。

如果您想重复此过程,则提供了一个脚本:https://github.com/rose-compiler/rose-develop/blob/master/scripts/2017-03-ROSE-Unbuntu-16.04-VM-setup.sh

demo@ubuntu:~$ cat installation_notes

ubuntu 64-bit 16.04.1 amd64

name: Ubuntu-ROSE-Demo-V3
username: demo
password: password
Virtual machine name: Ubuntu-ROSE-Demo-V3

hard disk: 30 GB, split
memory 4096 MB
processors 2

cloned rose-develop on 2/22/2017
version 0.9.7.188
installed with: 
gcc 4.9.3
Boost 1.61.0
EDG 4.12

-------------------- INSTALLATION PROCEDURES --------------------

>$ sudo apt-get update
>$ sudo apt-get upgrade
>$ sudo apt-get install git wget build-essential libtool automake flex bison python3-dev unzip perl-doc

---------- change gcc to 4.9.3 ----------
# gcc 4.9 or later must be used to support C++11 features

>$ sudo apt-get install gcc-4.9 g++-4.9 gfortran-4.9
>$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.9 100
>$ sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.9 100
>$ sudo update-alternatives --install /usr/bin/gfortran gfortran /usr/bin/gfortran-4.9 100

check that gcc -v says version 4.9.3

---------- install jdk ----------

# download jdk-7u51-linux-x64.tar.gz (from http://ftp.upf.br/pub/linux/java/jdk-7u51-linux-x64.tar.gz or official oracle website )

>$ mkdir ~/opt/jvm
>$ cd ~/opt/jvm
>$ tar xvf ~/Downloads/jdk-7u51-linux-x64.tar.gz 

# add to .bashrc
PATH=/home/demo/opt/jvm/jdk1.7.0_51/bin:$PATH
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/demo/opt/jvm/jdk1.7.0_51/jre/lib/amd64/server:/home/demo/opt/jvm/jdk1.7.0_51/lib
export PATH LD_LIBRARY_PATH

source ~/.bashrc
check that javac -version says javac 1.7.0_51

---------- installing Boost ----------
# We highly recommend to install boost into its own path, instead of into system wide path. 
# The system default installation has a different directory layout than our build system expects ($BOOST_ROOT/include/boost and $BOOST_ROOT/lib/). 
# If you still want to use the system wide installation of boost, you have to separately specify where to find headers and libraries, 
# for example: --with-boost=/usr --with-boost-libdir=/usr/lib/x86_64-linux-gnu 

# download boost from
# https://sourceforge.net/projects/boost/files/boost/1.61.0/

>$ cd ~/Downloads
>$ wget -O boost-1.61.0.tar.bz2 http://sourceforge.net/projects/boost/files/boost/1.61.0/boost_1_61_0.tar.bz2/download
>$ tar xf boost-1.61.0.tar.bz2
>$ cd boost_1_61_0
>$ ./bootstrap.sh --prefix=/home/demo/opt/boost/1.61.0/gcc-4.9.3-default --with-libraries=chrono,date_time,filesystem,iostreams,program_options,random,regex,serialization,signals,system,thread,wave
>$ ./b2 -sNO_BZIP2=1 install

# add to .bashrc
export LD_LIBRARY_PATH=/home/demo/opt/boost/1.61.0/gcc-4.9.3-default/lib:$LD_LIBRARY_PATH

---------- install zgrviewer ----------

Download and untar the ZGRViewer distribution.
wget -O zgrviewer-0.10.0.zip https://sourceforge.net/projects/zvtm/files/zgrviewer/0.10.0/zgrviewer-0.10.0.zip/download

>$ cd ~/opt/
>$ unzip ~/Downloads/zgrviewer-0.10.0.zip 

Edit it's "run.sh" script so that the ZGRV_HOME variable has the correct value. The scripts/zgrviewerExampleScript has some additional java switches that are useful.
ZGRV_HOME=/home/demo/opt/zgrviewer-0.10.0

Edit ~/.bashrc and add an alias that allows you to run ZGRViewer by typing "zgrviewer":

alias zgrviewer='/home/demo/opt/zgrviewer-0.10.0/run.sh'

>$ sudo apt-get install graphviz

Run zgrviewer and edit the preferences to point to graphviz bins

---------------------------

# doxygen
>$ sudo apt-get install doxygen 

---------------------------

# latex
>$ sudo apt-get install texlive

---------------------------

# needed to install yaml 
>$ sudo apt-get install cmake

# yaml-cpp, for reading YAML or JSON configuration files and storing results. 
# Yaml-cpp must be compiled against the same version of boost used
# download yaml-cpp-yaml-cpp-0.5.3.tar.gz from https://github.com/jbeder/yaml-cpp/releases

# Download source code to ~/Downloads/yaml-cpp-0.5.3.tar.gz
>$ BOOST_ROOT=/home/demo/opt/boost/1.61.0/gcc-4.9.3-default
>$ YAMLCPP_ROOT=/home/demo/opt/yaml/0.5.3/boost-1.61.0/gcc-4.9.3-default
>$ cd ~/Downloads
>$ tar xzvf yaml-cpp-yaml-cpp-0.5.3.tar.gz
>$ mkdir yaml-cpp-yaml-cpp-0.5.3/_build
>$ cd yaml-cpp-yaml-cpp-0.5.3/_build
>$ cmake .. -DBOOST_ROOT=$BOOST_ROOT -DCMAKE_INSTALL_PREFIX=$YAMLCPP_ROOT
>$ make install

---------------------------

# Dlib.
# --with-dlib='/home/demo/opt/dlib/18.18'
# Download tarball from http://dlib.net/  
# or https://sourceforge.net/projects/dclib/files/dlib/v18.18/
# unpack into desired installation directory

>$ mkdir ~/opt/dlib
>$ cd ~/opt/dlib
>$ tar -xf ~/Downloads/dlib-18.18.tar.bz2
>$ mv dlib-18.18 18.18

---------------------------

# For various analysis algorithms that use cryptographic functions
>$ sudo apt-get install libssl-dev libgcrypt11-dev 

---------------------------

# For parsing XML files in certain tools such as roseHPCT and BinaryContextLookup.
>$ sudo apt-get install libxml2-dev 

---------------------------

>$ sudo apt-get install libdwarf-dev

---------- bashrc ----------

.bashrc should have

# add jdk to PATH and LD_LIBRARY_PATH
PATH=/home/demo/opt/jvm/jdk1.7.0_51/bin:$PATH
LD_LIBRARY_PATH=/home/demo/opt/jvm/jdk1.7.0_51/jre/lib/amd64/server:/home/demo/opt/jvm/jdk1.7.0_51/lib:$LD_LIBRARY_PATH
# add boost to LD_LIBRARY_PATH
LD_LIBRARY_PATH=/home/demo/opt/boost/1.61.0/gcc-4.9.3-default/lib:$LD_LIBRARY_PATH
# create alias for zgrviewer
alias zgrviewer='/home/demo/opt/zgrviewer-0.10.0/run.sh'
export PATH LD_LIBRARY_PATH

---------- install rose ----------

>$ cd ~/
>$ git clone https://github.com/rose-compiler/rose-develop

>$ cd rose-develop
>$ ./build
>$ cd ..
>$ mkdir build-rose
>$ cd build-rose
>$ CC=/usr/bin/gcc-4.9 CXX=g++-4.9 FC=/usr/bin/gfortran-4.9 CXXFLAGS='-g -rdynamic -Wall -Wno-unused-local-typedefs -Wno-attributes' /home/demo/rose-develop/configure --enable-assertion-behavior=abort --prefix=/home/demo/opt/rose_inst --with-CFLAGS=-fPIC --with-CXXFLAGS=-fPIC --with-C_OPTIMIZE=-O0 --with-CXX_OPTIMIZE=-O0 --with-C_DEBUG='-g -rdynamic' --with-CXX_DEBUG='-g -rdynamic' --with-C_WARNINGS='-Wall -Wno-unused-local-typedefs -Wno-attributes' --with-CXX_WARNINGS='-Wall -Wno-unused-local-typedefs -Wno-attributes' --with-ROSE_LONG_MAKE_CHECK_RULE=yes --with-boost=/home/demo/opt/boost/1.61.0/gcc-4.9.3-default --with-gfortran='/usr/bin/gfortran-4.9' --with-python='/usr/bin/python3' --with-java=/home/demo/opt/jvm/jdk1.7.0_51/bin/javac --enable-languages=all --enable-projects-directory --with-doxygen --without-sqlite3 --without-libreadline --without-magic --with-yaml='/home/demo/opt/yaml/0.5.3/boost-1.61.0/gcc-4.9.3-default' --with-dlib='/home/demo/opt/dlib/18.18' --without-wt --without-yices --without-pch --enable-rosehpct --with-gomp_omp_runtime_library=/usr/lib/gcc/x86_64-linux-gnu/4.9/ --without-haskell --enable-edg_version=4.12
>$ make core
>$ make install-core

---------- set.rose ----------

# create a file to set the rose environment

>$ cd ~/
>$ cat > set.rose
ROSE_INS=/home/demo/opt/rose_inst
PATH=$PATH:$ROSE_INS/bin
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ROSE_INS/lib
# Don't forget to export variables !!!
export PATH LD_LIBRARY_PATH

------- using ROSE ----------

>$ source set.rose.edg
>$ mkdir tests/
>$ cd tests/
>$ cat > sample.c
void foo()
{
	int a = 0;
	a += 1;
	return a;
}

>$ identityTranslator -c sample.c
>$ dotGenerator -c sample.c 

下载使用 VMware Player 创建的虚拟机镜像

  • http://www.rosecompiler.org/Ubuntu-ROSE-Demo-V2.tar.gz
  • 警告:这是一个 6.7 GB 的大文件(完全解压缩后为 18.2 GB)。根据您的高速互联网连接速度,下载可能需要约 1 小时。
  • 演示用户帐户(Ubuntu 中的 sudo 用户)
    • 帐户:demo
    • 密码:password

警告:由于 LLNL 对最大下载文件大小的限制,LLNL 用户可能无法下载它。在未经授权的情况下运行虚拟机也可能违反 LLNL 的安全策略。因此,此镜像不应在 LLNL 内部使用。


在 Windows 上,您可以安装 7-zip (http://www.7-zip.org/) 将 tar 包(.tar.gz 文件)解压缩到一个文件夹中。

  • 在台式电脑上,它可能需要大约 20 分钟才能完成两步解压缩(.tar.gz 到 .tar,然后 .tar 到文件夹)。
  • 最终文件夹大小约为 18.2 GB

demo@ubuntu:~$ cat readme

This is a Ubuntu 14.04 virtual machine with installed ROSE-edg4.x. 

Directory List
* ~/rose-edg4x.git  : github.com rose edg4.x-based, checked out on Jan 24, 2015

* ~/buildtree  : build tree of rose, using the following configure command: 

../rose-edg4x.git/configure --prefix=/home/demo/opt/rose_inst --with-boost=/home/demo/opt/boost_1.45.0_inst --with-C_OPTIMIZE=-O0 --with-CXX_OPTIMIZE=-O0 --with-gomp_omp_runtime_library=/usr/lib/gcc/x86_64-linux-gnu/4.8/

* ~/opt/rose_inst : installation path of rose (--prefix value)

* ~/rose-project-template.git:  project templates using the installed rose as a library.

*~/tests: a simple c file, processed by identityTranslator and dotGeneratorWholeASTGraph. 
  type run.sh filex.dot to view a dot file of AST graph

bash env in .bashrc has the following variables by default
----------------------
export PATH=$PATH:/home/demo/opt/jdk1.8.0_25/bin:/home/demo/opt/zgrviewer-0.8.2
export LD_LIBRARY_PATH=/home/demo/opt/boost_1.45.0_inst/lib:/home/demo/opt/jdk1.8.0_25/jre/lib/amd64/server:$LD_LIBRARY_PATH
export JAVA_HOME=/home/demo/opt/jdk1.8.0_25/


To use rose translator , you need to type

source ~/set.rose

安装说明

[编辑 | 编辑源代码]

在撰写本文时,ROSE 不正式支持 Ubuntu 14.04 及其默认的 gcc 4.8,主要原因是 boost 和其他移植性问题。幸运的是,发布过程会生成 gcc 4.8 EDG 二进制文件。

在 Ubuntu 14.04 上成功编译 ROSE 使用了一些调整方法。

准备 ROSE 安装的先决条件

  • sudo apt-get install gcc g++ gfortran
  • sudo apt-get install libtool flex bison automake
  • sudo apt-get install zlibc zlib1g zlib1g-dev libbz2-dev // 主要用于 boost iostreams 库

系统头文件路径的 Hack 1

  • sudo ln -s /usr/include/x86_64-linux-gnu/sys /usr/include/sys
    • 这是一个 Hack,因为 rose 使用绝对路径来查找一些系统头文件。Ubuntu 14 的路径不同。应该有一个更好的修复方法。

Boost 1.45 需要进行修补才能与 gcc 4.8 协同工作,以便可以安装所需的线程库

Boost 1.45 修补程序 1

错误:/home/demo/development/install/gcc-4.4.7/boost-1.45.0/include/boost/thread/xtime.hpp:23: 错误:在数字常量之前预期标识符

解决方法:在文件 boost/thread/xtime.hpp 中,解决方法适用于 THREAD 和 WAVE

只取消定义 C11 宏:(以下 3 行是新的,后面是文件中现有的有问题的枚举)

#ifdef TIME_UTC
#undef TIME_UTC
#endif

enum xtime_clock_types
{
    TIME_UTC=1
};

Boost 1.45 修补程序 2:强制 boost 识别 gcc 4.7 及更高版本实际上支持线程。

针对 boost/config/stdlib/libstdcpp3.hpp 的修补程序

33	33	 
34	34	#ifdef __GLIBCXX__ // gcc 3.4 and greater: 
35	35	#  if defined(_GLIBCXX_HAVE_GTHR_DEFAULT) \ 
36	 	        || defined(_GLIBCXX__PTHREADS) 
 	36	        || defined(_GLIBCXX__PTHREADS) \ 
 	37	        || defined(_GLIBCXX_HAS_GTHREADS) 
37	38	      // 
38	39	      // If the std lib has thread support turned on, then turn it on in Boost 
39	40	      // as well.  We do this because some gcc-3.4 std lib headers define _REENTANT 


ROSE 的修补程序 3,提高 boost 文件系统允许的 gcc 版本

demo@ubuntu:~/rose-edg4x.git$ git diff
diff --git a/src/util/support/FileHelper.h b/src/util/support/FileHelper.h
index d2ca5b6..142e509 100644
--- a/src/util/support/FileHelper.h
+++ b/src/util/support/FileHelper.h
@@ -5,7 +5,8 @@
 // Non-windows support should used boost filesystem 2 if using GNU version less than 4.7.
 #ifndef _MSC_VER
 // #if ((BACKEND_CXX_COMPILER_MAJOR_VERSION_NUMBER == 4) && (BACKEND_CXX_COMPILER_MINOR_VERSION_NUMBER < 7))
-#if (defined(BACKEND_CXX_IS_INTEL_COMPILER) || ((BACKEND_CXX_COMPILER_MAJOR_VERSION_NUMBER == 4) && (BACKEND_CXX_COMPILER_MINOR_VERSION_NUMBER < 7)))
+// Liao, 1/24/2015. Not sure why GCC version is checked when we are taling about boost filesystem version. bumped up to 9 so gcc 4.8 can be supported  (<8 do
+#if (defined(BACKEND_CXX_IS_INTEL_COMPILER) || ((BACKEND_CXX_COMPILER_MAJOR_VERSION_NUMBER == 4) && (BACKEND_CXX_COMPILER_MINOR_VERSION_NUMBER < 9)))
   #define BOOST_FILESYSTEM_VERSION 2
 #endif
 #else
@@ -56,8 +57,8 @@ public:
 
 // DQ (3/8/2014): Adding use of BACKEND_CXX_IS_INTEL_COMPILER to support Intel compiler for backend use.
 #ifndef _MSC_VER
-// #if (defined(_MSC_VER) || ((BACKEND_CXX_COMPILER_MAJOR_VERSION_NUMBER == 4) && (BACKEND_CXX_COMPILER_MINOR_VERSION_NUMBER < 7)))
-#if (defined(BACKEND_CXX_IS_INTEL_COMPILER) || ((BACKEND_CXX_COMPILER_MAJOR_VERSION_NUMBER == 4) && (BACKEND_CXX_COMPILER_MINOR_VERSION_NUMBER < 7)))
+// #if (defined(_MSC_VER) || ((BACKEND_CXX_COMPILER_MAJOR_VERSION_NUMBER == 4) && (BACKEND_CXX_COMPILER_MINOR_VERSION_NUMBER < 9)))
+#if (defined(BACKEND_CXX_IS_INTEL_COMPILER) || ((BACKEND_CXX_COMPILER_MAJOR_VERSION_NUMBER == 4) && (BACKEND_CXX_COMPILER_MINOR_VERSION_NUMBER < 9)))
  // DQ (2/10/2014): I think this is the older BOOST_FILESYSTEM_VERSION 2 specific code.
     static string getFileName(const string& aPath) {
         path boostPath(aPath);
@@ -132,7 +133,7 @@ public:
 #ifndef _MSC_VER
 // DQ (3/8/2014): Adding use of BACKEND_CXX_IS_INTEL_COMPILER to support Intel compiler for backend use.
 // #if ((BACKEND_CXX_COMPILER_MAJOR_VERSION_NUMBER == 4) && (BACKEND_CXX_COMPILER_MINOR_VERSION_NUMBER < 7))
-#if (defined(BACKEND_CXX_IS_INTEL_COMPILER) || ((BACKEND_CXX_COMPILER_MAJOR_VERSION_NUMBER == 4) && (BACKEND_CXX_COMPILER_MINOR_VERSION_NUMBER < 7)))
+#if (defined(BACKEND_CXX_IS_INTEL_COMPILER) || ((BACKEND_CXX_COMPILER_MAJOR_VERSION_NUMBER == 4) && (BACKEND_CXX_COMPILER_MINOR_VERSION_NUMBER < 9)))
          // DQ (2/10/2014): I think this is the older BOOST_FILESYSTEM_VERSION 2 specific code.
             relativePath += *toPathIterator; //The first path element comes without the leading path delimiter
 #else
@@ -147,7 +148,7 @@ public:
             while (toPathIterator != boostToPath.end()) {
 #ifndef _MSC_VER
 // #if (defined(_MSC_VER) || ((BACKEND_CXX_COMPILER_MAJOR_VERSION_NUMBER == 4) && (BACKEND_CXX_COMPILER_MINOR_VERSION_NUMBER < 7)))
-#if (defined(BACKEND_CXX_IS_INTEL_COMPILER) || ((BACKEND_CXX_COMPILER_MAJOR_VERSION_NUMBER == 4) && (BACKEND_CXX_COMPILER_MINOR_VERSION_NUMBER < 7)))
+#if (defined(BACKEND_CXX_IS_INTEL_COMPILER) || ((BACKEND_CXX_COMPILER_MAJOR_VERSION_NUMBER == 4) && (BACKEND_CXX_COMPILER_MINOR_VERSION_NUMBER < 9)))
              // DQ (2/10/2014): I think this is the older BOOST_FILESYSTEM_VERSION 2 specific code.
                 relativePath += pathDelimiter + *toPathIterator;
 #else

对于使用基于 EDG 3.x 的 ROSE 的旧 VM,请参阅 ROSE_Compiler_Framework/Virtual_Machine_Image_V1

华夏公益教科书