filesystemが見つからないというコンパイルエラー

top20210302_gcc

結論から言うとgccが古かったという話。

Run Build Command(s):/usr/bin/make cmTC_13dca/fast && /usr/bin/make  -f CMakeFiles/cmTC_13dca.dir/build.make CMakeFiles/cmTC_13dca.dir/build
make[1]: ディレクトリ '/usr/local/gerbera/src/gerbera/CMakeFiles/CMakeTmp' に入ります
Building CXX object CMakeFiles/cmTC_13dca.dir/CheckIncludeFile.cxx.o
/usr/local/gerbera/bin/g++   -std=c++1z -o CMakeFiles/cmTC_13dca.dir/CheckIncludeFile.cxx.o -c /usr/local/gerbera/src/gerbera/CMakeFiles/CMakeTmp/CheckIncludeFile.cxx
/usr/local/gerbera/src/gerbera/CMakeFiles/CMakeTmp/CheckIncludeFile.cxx:1:10: 致命的エラー: filesystem: そのようなファイルやディレクトリはありません
 #include <filesystem>
          ^~~~~~~~~~~~
コンパイルを停止しました。
CMakeFiles/cmTC_13dca.dir/build.make:84: ターゲット 'CMakeFiles/cmTC_13dca.dir/CheckIncludeFile.cxx.o' のレシピで失敗しました
make[1]: *** [CMakeFiles/cmTC_13dca.dir/CheckIncludeFile.cxx.o] エラー 1
make[1]: ディレクトリ '/usr/local/gerbera/src/gerbera/CMakeFiles/CMakeTmp' から出ます
Makefile:140: ターゲット 'cmTC_13dca/fast' のレシピで失敗しました
make: *** [cmTC_13dca/fast] エラー 2

何だかfilesystemがincludeできないというエラー。試しに下記のコードを書いてみる。

gerbera@fs0:~/src/gerbera$ cat test.c
#include<filesystem>
gerbera@fs0:~/src/gerbera$ /usr/local/gerbera/bin/g++ -o test.o -c ./test.c 
./test.c:1:9: 致命的エラー: filesystem: そのようなファイルやディレクトリはありません
 #include<filesystem>
         ^~~~~~~~~~~~
コンパイルを停止しました。

確かにコンパイルできない。gccのバージョンは下記。

gerbera@fs0:~/src/gerbera$ /usr/local/gerbera/bin/g++ --version
g++ (GCC) 7.5.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

ちなみに<external/filesystem>とするとコンパイルは通る。

Webにはgccの各バージョンで挙動を確認できるサイトが存在する。

https://wandbox.org/

上のサイトで確認すると、gcc7.xはエラーになるが、8.x以降は問題ないらしい。どうやら7.xでは試験的な機能だったらしい。


top20210302_gcc