Jupyternotebook添加c++核心支持的配置过程
一、环境:
虚拟机:
(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
Jupyternotebook添加c++核心支持的配置过程的更多相关文章
- IDEA02 利用Maven创建Web项目、为Web应用添加Spring框架支持、bean的创建于获取、利用注解配置Bean、自动装配Bean、MVC配置
1 环境版本说明 Jdk : 1.8 Maven : 3.5 IDEA : 专业版 2017.2 2 环境准备 2.1 Maven安装及其配置 2.2 Tomcat安装及其配置 3 详细步骤 3.1 ...
- 菜鸟帮你跳过openstack配置过程中的坑[文末新添加福利]
一:前言 对于一个以前做java全栈工程师而言,而且没学过Linux,很少用虚拟机(还是在大学的时候简单的用过),去配置openstack我想我入的坑肯定比有基础的一定要多,躺在每个坑中徘徊思索的时间 ...
- GDAL添加ECW格式支持
目录 GDAL添加ECW格式支持 ECW 下载ECW JPEG SDK 在Unix平台构建支持ECW的GDAL 二进制ECW SDK和GCC >= 5.1 在Linux上构建的教程 在Windo ...
- 图解MySQL5.5详细安装与配置过程
MySQL是一个开源的关系型数据库管理系统,原由瑞典MySQL AB公司开发,目前属于Oracle公司旗下.MySQL是目前世界上开源数据库中最受欢迎的产品之一,是应用最为广泛的开源数据库.MySQL ...
- WCF分布式开发步步为赢(2)自定义托管宿主WCF解决方案开发配置过程详解
上一节<WCF分布式框架基础概念>我们介绍了WCF服务的概念和通信框架模型,并给出了基于自定义托管服务的WCF程序的实现代码.考虑到WCF分布式开发项目中关于托管宿主服务配置和客户端添加引 ...
- Intellij IDEA14 下添加ExtJS提示支持
前言: 虽然Interlij IDEA比起Eclipse对待EXT更为支持,但自己上手后总不能达到Intellij 开发ExtJS 应用指南(http://blog.csdn.net/s4640368 ...
- 【转】android 最新 NDK r8 在window下开发环境搭建 安装配置与使用 详细图文讲解,完整实际配置过程记录(原创)
原文网址:http://www.cnblogs.com/zdz8207/archive/2012/11/27/android-ndk-install.html android 最新 NDK r8 在w ...
- Hadoop的配置过程(虚拟机中的伪分布模式)
1引言 hadoop如今已经成为大数据处理中不可缺少的关键技术,在如今大数据爆炸的时代,hadoop给我们处理海量数据提供了强有力的技术支撑.因此,了解hadoop的原理与应用方法是必要的技术知识. ...
- (4.1)Spring MVC执行原理和基于Java的配置过程
一.Spring MVC执行原理和基于Java配置的配置过程 (一)Spring MVC执行过程,大致为7步. 所有的请求都会经过Spring的一个单例的DispacherServlet. Dispa ...
随机推荐
- Navicat12.1系列安装,破解以及破解navicat报错的解决方案
由于上课的需要,我们必须自己下载并安装 Navicat Premium 12,虽然安装过程很简单,但是安装后的navicat只能试用,并没有永久激活,然而我还想永久使用,所以就各种百度,因为不断地遇到 ...
- 树莓派4B踩坑指南 - (15)搭建在线python IDE
今天想在树莓派上自己搭一个在线的python IDE,于是找到了一篇教程--Fred913大神的从头开始制作OJ-在线IDE的搭建 自己尝试动手做了一下, 还是发现不少细节需要注意, 记录在此 如果不 ...
- 蓝桥杯2019初赛]迷宫(dfs版本)
传送门 大意: 题目的意思还是模板的搜索,不同的是我们要记录路径了,而且是最短字典序最小的路径. 思路: 1.对于字典序最小,也就是说我们要尽量先往下走,然后是左- 这个很简单,因为在dfs中是顺序枚 ...
- 2249: Altruistic Amphibians 01背包的应用 + lh的简单图论 图转树求lca
第一个 写了两个比较简单的数论题目,就是整除理论的两个题目,第一个题目比较蠢,第二个稍微要动一点脑筋 Codeforces Round #347 (Div. 2) – A. Complicated G ...
- http协议跟tcp协议的简单理解
在说明这两个协议之前,我们先简单说一下网络的分层. 1)应用层 支持网络应用,应用协议仅仅是网络应用的一个组成部分,运行在不同主机上的进程则使用应用层协议进行通信.主要的协议有:http.ftp.te ...
- 环境篇:Superset
环境篇:Superset Superset 是什么? Apache Superset 是一个开源.现代.轻量的BI分析工具,能够对接多种数据源,拥有丰富的图表展示形式.支持自定义仪表盘,用户界面友好, ...
- java1.8新特性之stream
什么是Stream? Stream字面意思是流,在java中是指一个来自数据源的元素队列并支持聚合操作,存在于java.util包中,又或者说是能应用在一组元素上一次执行的操作序列.(stream是一 ...
- mysql-kettle-superset电商可视化数据分析
1.项目概述 需求 对电商业务中的用户.商品.订单的数据进行分析,观察运营的情况 架构 业务数据库:Mysql:存储最原始的数据 ETL:Kettle 数据仓库:Mysql:存储需要进行分析处理的数据 ...
- Centos7下设置ceph 12.2.1 (luminous)dashboard UI监控功能
前言 本文所使用的集群是作者在博客 Centos7下部署ceph 12.2.1 (luminous)集群及RBD使用 中所搭建的集群 dashboard是为了完成对集群状态进行UI监控所开发的功能, ...
- 抛弃os.path,拥抱pathlib
基于Python的文件.目录和路径操作,我们一般使用的是os.path模块. pathlib是它的替代品,在os.path上的基础上进行了封装,实现了路径的对象化,api更加通俗,操作更便捷,更符编程 ...