跳轉到內容

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://dockerdocs.tw/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

華夏公益教科書