c++repl jupyter notebook
C++非常不方便的一个地方就是没有官方成熟的REPL。 尝试了用本地jupyter notebook 做REPL, 效果不是很理想, 如果需求不是很复杂的话,还是建议用在线的CPP repl, 比如https://replit.com/.
现在有一个开源项目Cling,The cling C++ interpreter.
下面是官方介绍:
Cling is an interactive C++ interpreter, built on top of Clang and LLVM compiler infrastructure. Cling realizes the read-eval-print loop (REPL) concept, in order to leverage rapid application development. Implemented as a small extension to LLVM and Clang, the interpreter reuses their strengths such as the praised concise and expressive compiler diagnostics.
并且,这个cling自带一个 jupyter kernel. 并且有Jupyter Cling安装教程.
conda上也有cling的包,可以通过conda install -c conda-forge xeus-cling
安装, 这里有安装说明。
我在Mac上安装, 启动后kernel不能正常工作,跑C++代码的时候抛错:
error: no member named 'strtod' in the global namespace
using ::strtod;
error: no member named 'atoll' in the global namespace
也试过几个docker, 都有各种问题,有些能正常跑代码。 如果需求不是很复杂的话,还是建议用在线的CPP repl, 比如https://replit.com/.
- Docker-Jupyter-Xeus-Cling-OpenCV,
- xcpp14能正常工作.
- 能正常跑Opencv的例子。
- xcpp17不能正常工作. known issue: cpp17 may not working.
KernelRestarter: restarting kernel (1/5), new random ports
- 有完整的dockerfile和编译脚本。
- 有编译opencv的细节。
- 用到了他的另外一个库Seachaos/opencv-cpp-for-xeus-cling
- xeus-cling C++ Jupyter kernel inside a docker container,
- cpp14工作, cpp17不工作。
- 不工作。base image换成continuumio/miniconda3还是不行。
- xeus cling官方,
- 也不管用。
- Xeus-Cling: Run C++ code in Jupyter Notebook,
- 不好用。这里面有讲怎么在notebook里面配置opencv.
- https://hub.docker.com/r/sehrig/cling,
- 这个能用,跑命令
run -it -p 8888:8888 sehrig/cling jupyter-notebook
就能运行起来, 如果要加载本地目录,可以用v映射. - cling-cpp14能用
- cling-cpp17能用。
- 没有opencv的集成。
- 这个docker是用这里的脚本生成的。
- 这里有Latest docker file
- 这个能用,跑命令
- Xeus Cling Installation from source, github里面的安装教程安装以后还是抛同样的问题,
envs/xeus-cling/include/c++/v1/cstdlib:120:9: error: no member named 'strtoull' in the global namespace
.- 如果编译的时候找不到CC, CXX编译器,可以通过下面的方法设置。https://stackoverflow.com/a/41381007 ~~~sh xcrun -find c++ xcrun -find cc export CC=”/path/to/your/c/compiler/executable” export CXX=”/path/to/your/cpp/compiler/executable” ~~~ 1.
一些有用的插件.
- jupyter_contrib_nbextension, 插件管理器, 有很多插件.
- 这个会在notebook加一个tab,里面列出一些知名的插件。要使用某插件需要在命令行打开。
- 可以通过
- xtensor, 一个可以处理numpy数据的c++库. The C++ support in Jupyter is powered by the xeus-cling C++ kernel. Together with xeus-cling, xtensor enables a similar workflow to that of NumPy with the IPython Jupyter kernel.
- xwidgetsA C++ backend for the Jupyter interactive widgets.
- JupyterLab, 高级版的Jupyter Notebook. 它有一个文件浏览器,可以预览各种文件, https://zhuanlan.zhihu.com/p/87403131。
- https://github.com/sylabs/singularity, open source container platform.
- https://github.com/NVIDIA/hpc-container-maker, 一个生成docker文件的工具.