Cythonのコンパイルエラー
デフォルトのgccのバージョンが古い可能性があります.
1. gccのバージョンを変える
$ls /usr/local/bin/ や $ls /usr/bin/ でインストールされているgccのバージョンを調べて, 新しそうなやつを $export CC=gccXX で指定してから実行する
2. コンパイルオプションを追加
extra_compile_args=["-std=c++11"]を追加
source = ["purupuru.cpp", "./purupuru.cpp.pyx"] setup( cmdclass=dict(build_ext=build_ext), ext_modules=[ Extension("purupuru.cpp", source, language="c++", extra_compile_args=["-std=c++11"]) ], include_dirs=[np.get_include()], )
cythonに幸あれ...
コンパイルエラー
hogehoge@opt-gtx:/work/hogehoge/bugbug.py $python setup.py build_ext -i running build_ext cythoning ./purupuru.pyx to ./purupuru.c /home/hogehoge/.pyenv/versions/3.9.7/lib/python3.9/site-packages/Cython/Compiler/Main.py:369: FutureWarning: Cython directive 'language_level' not set, using 2 for now (Py2). This will change in a later release! File: /work/hogehoge/bugbug.py/purupuru.pyx tree = Parsing.p_module(s, pxd, full_module_name) building 'purupuru' extension gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fPIC -I/home/hogehoge/.pyenv/versions/3.9.7/lib/python3.9/site-packages/numpy/core/include -I/home/hogehoge/.pyenv/versions/3.9.7/include -I/home/hogehoge/.pyenv/versions/3.9.7/include/python3.9 -c ./purupuru.c -o build/temp.linux-x86_64-3.9/./purupuru.o In file included from /home/hogehoge/.pyenv/versions/3.9.7/lib/python3.9/site-packages/numpy/core/include/numpy/ndarraytypes.h:1822:0, from /home/hogehoge/.pyenv/versions/3.9.7/lib/python3.9/site-packages/numpy/core/include/numpy/ndarrayobject.h:12, from /home/hogehoge/.pyenv/versions/3.9.7/lib/python3.9/site-packages/numpy/core/include/numpy/arrayobject.h:4, from ./purupuru.c:620: /home/hogehoge/.pyenv/versions/3.9.7/lib/python3.9/site-packages/numpy/core/include/numpy/npy_1_7_deprecated_api.h:17:2: warning: #warning "Using deprecated NumPy API, disable it with " "#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION" [-Wcpp] #warning "Using deprecated NumPy API, disable it with " \ ^ gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fPIC -I/home/hogehoge/.pyenv/versions/3.9.7/lib/python3.9/site-packages/numpy/core/include -I/home/hogehoge/.pyenv/versions/3.9.7/include -I/home/hogehoge/.pyenv/versions/3.9.7/include/python3.9 -c _purupuru.c -o build/temp.linux-x86_64-3.9/_purupuru.o gcc -pthread -shared -L/home/hogehoge/.pyenv/versions/3.9.7/lib -L/home/hogehoge/.pyenv/versions/3.9.7/lib build/temp.linux-x86_64-3.9/./purupuru.o build/temp.linux-x86_64-3.9/_purupuru.o -o /work/hogehoge/bugbug.py/purupuru.cpython-39-x86_64-linux-gnu.so running build_ext cythoning ./purupuru_2.pyx to ./purupuru_2.cpp /home/hogehoge/.pyenv/versions/3.9.7/lib/python3.9/site-packages/Cython/Compiler/Main.py:369: FutureWarning: Cython directive 'language_level' not set, using 2 for now (Py2). This will change in a later release! File: /work/hogehoge/bugbug.py/purupuru_2.pyx tree = Parsing.p_module(s, pxd, full_module_name) building 'purupuru_2' extension gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fPIC -I/home/hogehoge/.pyenv/versions/3.9.7/lib/python3.9/site-packages/numpy/core/include -I/home/hogehoge/.pyenv/versions/3.9.7/include -I/home/hogehoge/.pyenv/versions/3.9.7/include/python3.9 -c ./purupuru_2.cpp -o build/temp.linux-x86_64-3.9/./purupuru_2.o In file included from /home/hogehoge/.pyenv/versions/3.9.7/lib/python3.9/site-packages/numpy/core/include/numpy/ndarraytypes.h:1822:0, from /home/hogehoge/.pyenv/versions/3.9.7/lib/python3.9/site-packages/numpy/core/include/numpy/ndarrayobject.h:12, from /home/hogehoge/.pyenv/versions/3.9.7/lib/python3.9/site-packages/numpy/core/include/numpy/arrayobject.h:4, from ./purupuru_2.cpp:634: /home/hogehoge/.pyenv/versions/3.9.7/lib/python3.9/site-packages/numpy/core/include/numpy/npy_1_7_deprecated_api.h:17:2: warning: #warning "Using deprecated NumPy API, disable it with " "#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION" [-Wcpp] #warning "Using deprecated NumPy API, disable it with " \ ^ gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fPIC -I/home/hogehoge/.pyenv/versions/3.9.7/lib/python3.9/site-packages/numpy/core/include -I/home/hogehoge/.pyenv/versions/3.9.7/include -I/home/hogehoge/.pyenv/versions/3.9.7/include/python3.9 -c _purupuru_2.cpp -o build/temp.linux-x86_64-3.9/_purupuru_2.o _purupuru_2.cpp:4:93: error: ‘>>’ should be ‘> >’ within a nested template argument list (int bs, int n, double step[], float D[], std::vector<std::vector<float>> &thresho ^ _purupuru_2.cpp: In function ‘void extract_elements(int, int, double*, float*, std::vector<std::vector<float> >&)’: _purupuru_2.cpp:18:17: warning: ‘auto’ changes meaning in C++11; please remove it [-Wc++0x-compat] auto result = std::find(tmp.begin(), tmp.end(), _k);)