C++11/14/17 인터프리터 환경 Jupyter-Cling
Jupyter-Cling
이전에 C++ 인터프리터 Cling에 대해 "C++11 인터프리터 Cling 빌드"이라는 기사를 썼습니다.
C++의 인터프리터이니까 인터프리터 환경의 Jupyter로부터 호출할 수 있지 않을까 하고 Jupyter 커널
Cling 설치
CERN 사이트에서 바이너리도 배포 되고 있기 때문에 통상은 이쪽을 사용하는 것이 좋을 것입니다.
바이너리 버전을 사용하는 경우는 다음 진행해 주세요.
Cling Packaging Tool
Cling 빌드에 뭔가 좋은 스크립트가 준비되어 있으므로 다음 단계로 Cling을 빌드합니다.
또한 Cling을 빌드할 때 Clang을 빌드하기 때문에 매우 시간이 걸립니다.
wget https://raw.githubusercontent.com/root-project/cling/master/tools/packaging/cpt.py
chmod +x cpt.py
./cpt.py --check-requirements && ./cpt.py --create-dev-env Debug --with-workdir=./cling-build/
덧붙여 ./cpt.py --check-requirements
곳에 CMake가 이미 들어 있지 않으면 이끼입니다.
CMake마저 들어 있으면 후는 자동으로 apt를 불러 필요한 라이브러리를 취득해 주는 것 같습니다.
cling-build/ling-Ubuntu-16.04-x86_64-0.5~dev-4681e80
와 같은 폴더가 있기 때문에, 임의의 장소 ( /opt/cling
등)에 심볼릭 링크를 붙이는 등 합니다.
Jupyter
/share/cling/Jupyter/kernel/
는 Jupyter 커널을 제공합니다.
pip install -e .
jupyter-kernelspec install --user cling-cpp17
jupyter-kernelspec install --user cling-cpp14
jupyter-kernelspec install --user cling-cpp11
jupyter를 시작할 때 cling에 경로를 통과해야하므로주의하십시오.
run.sh#!/usr/bin/env bash
PATH=/opt/cling/bin:$PATH jupyter notebook
Hello World
궁금한 곳
c++17이 시작되지 않음
c++17을 선택하면 다음과 같은 오류가 발생하여 커널이 시작되지 않습니다.
에러를 본 느낌 c++1z 밖에 대응하고 있는 것 같습니다. (Ubuntu 16.04 유래?)
error: invalid value 'c++17' in '-std=c++17'
note: use 'c++98' or 'c++03' for 'ISO C++ 1998 with amendments' standard
note: use 'gnu++98' or 'gnu++03' for 'ISO C++ 1998 with amendments and GNU extensions' standard
note: use 'c++11' for 'ISO C++ 2011 with amendments' standard
note: use 'gnu++11' for 'ISO C++ 2011 with amendments and GNU extensions' standard
note: use 'c++14' for 'ISO C++ 2014 with amendments' standard
note: use 'gnu++14' for 'ISO C++ 2014 with amendments and GNU extensions' standard
note: use 'c++1z' for 'Working draft for ISO C++ 2017' standard
note: use 'gnu++1z' for 'Working draft for ISO C++ 2017 with GNU extensions' standard
In file included from input_line_2:1:
/opt/cling/include/cling/Interpreter/RuntimeUniverse.h:162:26: warning: default template arguments for a function template are a C++11 extension [-Wc++11-extensions]
template <class T, class = T (*)() /*disable for arrays*/>
^ ~~~~~~~
input_line_2:3:62: error: expected function body after function declarator
extern "C" int __cxa_atexit(void (*f)(void*), void*, void*) noexcept;
^
input_line_2:5:55: error: use of undeclared identifier '__cxa_atexit'
extern "C" int atexit(void(*f)()) throw () { return __cxa_atexit((void(*)(void*))f, 0, __dso_handle); }
^
python3: cling-build/cling-src/tools/clang/lib/AST/DeclBase.cpp:1334: void clang::DeclContext::removeDecl(clang::Decl*): Assertion `(DC->hasExternalVisibleStorage() || Pos != Map->end()) && "no lookup entry for decl"' failed.
응급처치로 다음과 같은 수정을 합니다.
/share/cling/Jupyter/kernel/cling-cpp17/kernel.patchdiff -u a/cling-cpp17/kernel.json b/cling-cpp17/kernel.json
--- a/cling-cpp17/kernel.json 2017-09-06 04:46:58.764971000 +0900
+++ b/cling-cpp17/kernel.json 2017-09-06 07:16:59.802765356 +0900
@@ -4,6 +4,6 @@
"jupyter-cling-kernel",
"-f",
"{connection_file}",
- "--std=c++17"
+ "--std=c++1z"
]
}
/share/cling/Jupyter/kernel/clingkernel.patchdiff -u a/clingkernel.py b/clingkernel.py
--- a/clingkernel.py 2017-09-06 04:46:58.744971000 +0900
+++ b/clingkernel.py 2017-09-06 07:14:08.954707308 +0900
@@ -92,7 +92,7 @@
flush_interval = Float(0.25, config=True)
std = CaselessStrEnum(default_value='c++11',
- values = ['c++11', 'c++14', 'c++17'],
+ values = ['c++11', 'c++14', 'c++17', 'c++1z'],
help="C++ standard to use, either c++17, c++14 or c++11").tag(config=True);
def __init__(self, **kwargs):
다시 설치하면 c++17 커널이 시작됩니다.
pip install -e .
jupyter-kernelspec install --user cling-cpp17
cling이 떨어지면 용서없이 죽는다.
cling이 떨어지는 코드를 실행하면 용서없이 커널이 떨어집니다.
로그를 전혀 꺼내지 않고 재시작하기 때문에, 어디가 나쁜지 판별할 수 없고, 어느 정도의 장소와 근기가 필요합니다.
그러나 콘솔에서 cling이 떨어지면 모든 입력이 손실되는 반면 Jupyter는 입력 기록이 셀에 남아 있기 때문에 다시 시작하기가 매우 쉽습니다.
C++의 학습등의 용도로 Jupyter를 사용하지 않는 손은 없는 것이 아닐까요.
Reference
이 문제에 관하여(C++11/14/17 인터프리터 환경 Jupyter-Cling), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/mugwort_rc/items/b8087d1b6f9498b037d5
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
wget https://raw.githubusercontent.com/root-project/cling/master/tools/packaging/cpt.py
chmod +x cpt.py
./cpt.py --check-requirements && ./cpt.py --create-dev-env Debug --with-workdir=./cling-build/
pip install -e .
jupyter-kernelspec install --user cling-cpp17
jupyter-kernelspec install --user cling-cpp14
jupyter-kernelspec install --user cling-cpp11
#!/usr/bin/env bash
PATH=/opt/cling/bin:$PATH jupyter notebook
error: invalid value 'c++17' in '-std=c++17'
note: use 'c++98' or 'c++03' for 'ISO C++ 1998 with amendments' standard
note: use 'gnu++98' or 'gnu++03' for 'ISO C++ 1998 with amendments and GNU extensions' standard
note: use 'c++11' for 'ISO C++ 2011 with amendments' standard
note: use 'gnu++11' for 'ISO C++ 2011 with amendments and GNU extensions' standard
note: use 'c++14' for 'ISO C++ 2014 with amendments' standard
note: use 'gnu++14' for 'ISO C++ 2014 with amendments and GNU extensions' standard
note: use 'c++1z' for 'Working draft for ISO C++ 2017' standard
note: use 'gnu++1z' for 'Working draft for ISO C++ 2017 with GNU extensions' standard
In file included from input_line_2:1:
/opt/cling/include/cling/Interpreter/RuntimeUniverse.h:162:26: warning: default template arguments for a function template are a C++11 extension [-Wc++11-extensions]
template <class T, class = T (*)() /*disable for arrays*/>
^ ~~~~~~~
input_line_2:3:62: error: expected function body after function declarator
extern "C" int __cxa_atexit(void (*f)(void*), void*, void*) noexcept;
^
input_line_2:5:55: error: use of undeclared identifier '__cxa_atexit'
extern "C" int atexit(void(*f)()) throw () { return __cxa_atexit((void(*)(void*))f, 0, __dso_handle); }
^
python3: cling-build/cling-src/tools/clang/lib/AST/DeclBase.cpp:1334: void clang::DeclContext::removeDecl(clang::Decl*): Assertion `(DC->hasExternalVisibleStorage() || Pos != Map->end()) && "no lookup entry for decl"' failed.
diff -u a/cling-cpp17/kernel.json b/cling-cpp17/kernel.json
--- a/cling-cpp17/kernel.json 2017-09-06 04:46:58.764971000 +0900
+++ b/cling-cpp17/kernel.json 2017-09-06 07:16:59.802765356 +0900
@@ -4,6 +4,6 @@
"jupyter-cling-kernel",
"-f",
"{connection_file}",
- "--std=c++17"
+ "--std=c++1z"
]
}
diff -u a/clingkernel.py b/clingkernel.py
--- a/clingkernel.py 2017-09-06 04:46:58.744971000 +0900
+++ b/clingkernel.py 2017-09-06 07:14:08.954707308 +0900
@@ -92,7 +92,7 @@
flush_interval = Float(0.25, config=True)
std = CaselessStrEnum(default_value='c++11',
- values = ['c++11', 'c++14', 'c++17'],
+ values = ['c++11', 'c++14', 'c++17', 'c++1z'],
help="C++ standard to use, either c++17, c++14 or c++11").tag(config=True);
def __init__(self, **kwargs):
pip install -e .
jupyter-kernelspec install --user cling-cpp17
Reference
이 문제에 관하여(C++11/14/17 인터프리터 환경 Jupyter-Cling), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/mugwort_rc/items/b8087d1b6f9498b037d5텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)