一、環境:
虛擬機:
(1)系統:centos7.5_1804(64bit)版本
(2)軟件環境:git、python3.5.3、Jupyter4.4.0
二、下載安裝腳本:
資源及安裝說明:https://github.com/root-project/cling
(1)下載安裝腳本文件方式:
wget https://raw.githubusercontent.com/root-project/cling/master/tools/packaging/cpt.py
#由於網站在國外,下載這個文件很慢,不建議這樣操作。
(2)克隆軟件倉庫方式:
(ccl353) [python@centos75 test]$ git clone https://github.com/root-project/cling.git
#此方式由於使用了鏡像站點,速度很快。命令執行完成后,在當前目錄下產生cling目錄。
三、cmake安裝:
(ccl353) [python@centos75 test]$ pip install cmake==3.11.4
#cmake版本要求3.6.4以上,此處指定版本安裝3.11.4版,也可安裝最新版,沒有特殊要求。
四、安裝過程:
1、c++核心代碼編譯過程:
(ccl353) [python@centos75 test]$ cd cling/tools/packaging
(ccl353) [python@centos75 packaging]$ ./cpt.py --check-requirements && ./cpt.py --create-dev-env Debug --with-workdir=./cling-build/
#此過程很長,包括編譯過程中下載文件的時間及編譯過程的時間,以小時計,中間有幾個錯誤需要逐一解決:
(1)“c++: 編譯器內部錯誤:已殺死(程序 cc1plus)”——內存不足,增加內存或swap交換緩存。
(2)“collect2: 錯誤:ld 以信號 9 [已殺死] 退出。”——swap交換緩存不足,增加swap交換緩存
(3)“CMake Error at tools/clang/tools/driver/cmake_install.cmake:41 (file):
file INSTALL cannot copy file
"/home/python/projects/test/cling/tools/packaging/cling-build/builddir/bin/clang-5.0"
to "/tmp/cling-obj/bin/clang-5.0".”——目標磁盤空間不足,增加/tmp目錄掛載磁盤空間。
(4)“make: *** [install] 錯誤 1
subprocess.CalledProcessError: Command 'make -j4 install' returned non-zero exit status 2”——這個錯誤提示可不用理會,前面的錯誤解決后,這個錯誤就不會發生了,估計與前面的磁盤空間不足問題相關聯。
最終結果:
...
[100%] Built target cling
[100%] Running the Cling regression tests
lit.py: /home/python/projects/test/cling/tools/packaging/cling-build/cling-src/tools/cling/test/lit.cfg:261: note: using cling: '/home/python/projects/test/cling/tools/packaging/cling-build/builddir/./bin/cling'
lit.py: /home/python/projects/test/cling/tools/packaging/cling-build/cling-src/tools/cling/test/lit.cfg:272: note: Running tests from build tree
Testing Time: 423.23s
Expected Passes : 121
Expected Failures : 13
Unsupported Tests : 9
[100%] Built target check-cling
#編譯基本完成,但不是很理想,有13個測試未通過,但不影響使用。
#在/home/python/projects/test/cling/tools/packaging/cling-build/目錄下有一新生成目錄"cling-CentOS Linux-7.5.1804-x86_64-0.6~dev-6238cda",應該是編譯后的c++核心文件目錄
2、配置環境變量,並測試c++環境:
(1)添加PATH變量:
(ccl353) [python@centos75 bin]$ vi /home/python/.bashrc
...
# User specific aliases and functions
export PATH=$PATH:/home/python/projects/test/cling/tools/packaging/cling-build/"cling-CentOS Linux-7.5.1804-x86_64-0.6~dev-6238cda"/bin
(2)激活環境變量:
(ccl353) [python@centos75 bin]$ source /home/python/.bashrc
(3)測試c++環境:
(ccl353) [python@centos75 bin]$ cd /home/python
[python@centos75 ~]$ cling
****************** CLING ******************
* Type C++ code and press enter to run it *
* Type .q to exit *
*******************************************
[cling]$
#現此界面,表明c++基本可用!
3、安裝Jupyter環境下的c++核心(安裝說明文檔在:/home/python/projects/test/cling/tools/Jupyter/README.md):
[python@centos75 ~]$ cd /home/python/projects/test/cling/tools/packaging/cling-build/cling-CentOS Linux-7.5.1804-x86_64-0.6~dev-6238cda/share/cling/Jupyter/kernel
(ccl353) [python@centos75 kernel]$ ls
cling-cpp11 cling-cpp17 cling.ipynb scripts
cling-cpp14 cling-cpp1z clingkernel.py setup.py
(ccl353) [python@centos75 kernel]$ pip install -e .
4、注冊C++17/C++1z/C++14/C++11的kernelspec:
(ccl353) [python@centos75 kernel]$ jupyter-kernelspec install --user cling-cpp17
[InstallKernelSpec] Installed kernelspec cling-cpp17 in /home/python/.local/share/jupyter/kernels/cling-cpp17
(ccl353) [python@centos75 kernel]$ jupyter-kernelspec install --user cling-cpp1z
[InstallKernelSpec] Installed kernelspec cling-cpp1z in /home/python/.local/share/jupyter/kernels/cling-cpp1z
(ccl353) [python@centos75 kernel]$ jupyter-kernelspec install --user cling-cpp14
[InstallKernelSpec] Installed kernelspec cling-cpp14 in /home/python/.local/share/jupyter/kernels/cling-cpp14
(ccl353) [python@centos75 kernel]$ jupyter-kernelspec install --user cling-cpp11
[InstallKernelSpec] Installed kernelspec cling-cpp11 in /home/python/.local/share/jupyter/kernels/cling-cpp11
(ccl353) [python@centos75 kernel]$
#此時,運行jupyter notebook --no-browser --ip=* --port=8888,瀏覽器登錄notebook,在界面的右部點擊new,可以看到新增的c++核心。
4、Jupyter notebook的c++核心運行不穩定的處理:
上述安裝完成好,在使用notebook過程發現c++核心不穩定,觀察Jupyter notebook服務器的log信息,發現錯誤提示“RuntimeError: Cannot find /home/python/projects/test/cling/tools/packaging/cling-build/cling-CentOS Linux-7.5.1804-x86_64-0.6~dev-6238cda/lib/libclingJupyter.{so,dylib,dll}”,分析應該是缺少libclingJupyter相關文件導致。回頭觀察編譯過程,發現缺少的文件已在編譯過程中生成在/tmp/cling-obj/lib目錄下,只是沒有拷貝到適當位置。作如下處理:
從目錄/tmp/cling-obj/lib拷貝libclingJupyter.so.5.0.0文件到編譯結果的lib目錄,並做兩個軟連接文件:
(ccl353) [python@centos75 packaging]$ cp /tmp/cling-obj/lib/libclingJupyter.so.5.0.0 /home/python/projects/test/cling/tools/packaging/cling-build/"cling-CentOS Linux-7.5.1804-x86_64-0.6~dev-6238cda"/lib
(ccl353) [python@centos75 lib]$ ln -s libclingJupyter.so.5.0.0 libclingJupyter.so.5
(ccl353) [python@centos75 lib]$ ln -s libclingJupyter.so.5 libclingJupyter.so
(ccl353) [python@centos75 lib]$ ll
總用量 1144268
drwxrwxr-x 3 python python 4096 8月 22 20:54 clang
lrwxrwxrwx 1 python python 20 8月 22 21:32 libclingJupyter.so -> libclingJupyter.so.5
lrwxrwxrwx 1 python python 24 8月 22 21:31 libclingJupyter.so.5 -> libclingJupyter.so.5.0.0
-rwxr-xr-x 1 python python 1171719248 8月 22 21:08 libclingJupyter.so.5.0.0
#經上述處理過程后,jupyter notebook下的c++核心已能穩定運行。
5、小結:
jupyter notebook的c++核心支持的安裝編譯過程超過了我的預期,總體看需要注意幾個要點:
(1)內存要大(至少4G,實際使用了6G)
(2)swap交換緩存要大(實際使用達17G,編譯時設置swap空間為30G)
(3)/tmp目錄空間要大(實際使用達23G,編譯過程中專門配置了一塊100G磁盤做/tmp掛載盤)
(4)編譯時間長(實際編譯估計在10小時左右,中間涉及編譯過程中還要從網上下載文件,編譯代碼量達G數量級,故時間很長)
(5)還有部分工作需要手動操作(如:拷貝libclingJupyter.so.5.0.0等文件)
6、附:
小技巧:
(1)編譯過程中,可另開終端使用free和df命令觀察內存及磁盤使用情況,輔助觀察編譯過程的資源占用情況。
(2)原機swap交換分區只有1.3G,可通過如下命令增加swap交換空間(應使用root權限):
[root@centos75 home]# dd if=/dev/zero of=/home/swapfile bs=1M count=30000
[root@centos75 home]# mkswap /home/swapfile
[root@centos75 home]# swapon /home/swapfile
[root@centos75 home]# swapon -s
文件名 類型 大小 已用 權限
/dev/sda3 partition 1362940 0 -1
/home/swapfile file 30719996 0 -2