RTAI-Lab tutorial: Scilab, Comedi, and real-time controlの「2.3 EFLTK library」の内容です。
ソースコードの入手
チュートリアルでは、SVNで取得する手順になっているが、リポジトリが移動?していたので、直接 https://sourceforge.net/projects/ede/files/ から最新のバージョン( efltk-2.0.8.tar.gz, ede-2.1.tar.gz )を取得。
ビルド時のエラー1
チュートリアル記載の順に
# autoconf
# ./configure --disable-mysql --disable-unixODBC
# ./emake
とすすめたところ、以下のエラー。
filename_list.cpp: 関数 ‘int fl_filename_list(const char*, dirent***, int (*)(dirent**, dirent**))’ 内:
filename_list.cpp:62:71: エラー: ‘int (*)(const void*, const void*)’ から ‘int (*)(const dirent**, const dirent**)’ への無効な変換です [-fpermissive]
return scandir(dir, list, 0, (int(*)(const void*,const void*))sort);
^
In file included from /usr/src/efltk/efltk/filename.h:49:0,
from filename_list.cpp:35:
/usr/include/dirent.h:255:12: エラー: initializing argument 4 of ‘int scandir(const char*, dirent***, int (*)(const dirent*), int (*)(const dirent**, const dirent**))’ [-fpermissive]
extern int scandir (const char *__restrict __dir,
エラーチェックが働きすぎているようなので、エラーチェックを止めようとする。
# ./configure --disable-mysql --disable-unixODBC CXXFLAGS='-fpermissive'
上記でうまくいないので、「configure」ファイル内のCFLAGSと、CXXFLAGSに'-fpermissive'を追加して再度、ビルド。
ビルド時のエラー2
In file included from Fl_Png.cpp:5:0:
/usr/include/png.h:857:16: エラー: forward declaration of ‘png_struct {aka struct png_struct_def}’
typedef struct png_struct_def png_struct;
はじめのエラーは抜けられたが、別のエラーで止まった。調べてみたところ、libpngのインタフェースが途中(1.5.x ?)で変更になった事が原因のよう。古いインタフェースのlibpngを追加インストール。
# yum install libpng12-devel
古いlibpngの指定を、環境変数や、configureのオプションでやりたかったけど、上手くいかないので、思い切って、src/images/Fl_Png.cpp
の、#include <png.h>
を#include <libpng12/png.h>
に変更して切り抜けた。
上記で、ビルドが最後まで通るようになりました。