さんごー日記。

映画や本やゲームの感想をゆるく記録したり、プログラミングの勉強をゆるく記録するゆるい日記です。

xgrのビルドが失敗する(xgr_file.cpp:302:31: error: no matching function for call to ‘stat::stat(char*&, stat*)’)

xgrというのは波形データを視覚化するツール。ソースコードからビルドするようです。
xgr

ラズベリパイでxgrのビルドをしようとするとエラーになってしまう。
下記のような内容。

pi@raspberrypi:~/Downloads/x11/xgr $ sudo make
make -f xgr.mk
make[1]: Entering directory '/home/pi/Downloads/x11/xgr'
mkdir -p ./xgr_objs
gcc -g -c -I/usr/X11R6/include -DUNIX xgr_file.cpp -o ./xgr_objs/xgr_file.o
xgr_file.cpp: In function ‘void load_ascii(xgr_params_t&, vector_data_t&, input_style_t, graph_style_t, char*)’:
xgr_file.cpp:161:39: warning: ISO C++ forbids converting a string constant to ‘char*’ [-Wwrite-strings]
fp = open_file_or_die(file_name, "r");

^
xgr_file.cpp: In function ‘void load_binary(xgr_params_t&, vector_data_t&, input_style_t, graph_style_t, char*)’:
xgr_file.cpp:302:31: error: no matching function for call to ‘stat::stat(char*&, stat*)’
if (stat(file_name, &stat_buf) != 0) {
^
In file included from /usr/include/fcntl.h:79:0,
from /usr/include/X11/Xos.h:88,
from xgr.h:48,
from xgr_file.cpp:47:
/usr/include/arm-linux-gnueabihf/bits/stat.h:38:8: note: candidate: stat::stat()
struct stat
^~~~
/usr/include/arm-linux-gnueabihf/bits/stat.h:38:8: note: candidate expects 0 arguments, 2 provided
/usr/include/arm-linux-gnueabihf/bits/stat.h:38:8: note: candidate: constexpr stat::stat(const stat&)
/usr/include/arm-linux-gnueabihf/bits/stat.h:38:8: note: candidate expects 1 argument, 2 provided
/usr/include/arm-linux-gnueabihf/bits/stat.h:38:8: note: candidate: constexpr stat::stat(stat&&)
/usr/include/arm-linux-gnueabihf/bits/stat.h:38:8: note: candidate expects 1 argument, 2 provided
xgr_file.cpp:322:38: warning: ISO C++ forbids converting a string constant to ‘char*’ [-Wwrite-strings]
fp = open_file_or_die(file_name, "r");
^
xgr.mk:25: recipe for target 'xgr_objs/xgr_file.o' failed
make[1]: *** [xgr_objs/xgr_file.o] Error 1
make[1]: Leaving directory '/home/pi/Downloads/x11/xgr'
Makefile:2: recipe for target 'build' failed
make: *** [build] Error 2

解決方法

結論としては、xgr_file.cppに「#include <sys/stat.h>」を追加すればOKのようです。
Warningは沢山でますが、とりあえずバイナリが生成されました。

エラーの内容としては、参照しているstat.hのほうだとコンストラクタの引数が合わない感じ。意図していない同盟のファイルがロードされていたような感じだろうか。あんまり調べてないです。

make installも何かと失敗するのでインストールしてませんが、とりあえずグラフが表示されるのは確認できた。
f:id:thirtyfive:20180520235831p:plain

これでsptkで遊べるかな。

参考にしたサイト。

error: no matching function for call to ‘stat::stat(const char*, stat*) · Issue #10 · SimHacker/micropolis · GitHub
→あんまり関係なかった。
c++ - Header or something to add to a code to detect if folder exist - Stack Overflow
→ヘッダがincludeされてないんじゃね?とのコメント。その通りだった。