C言語の関数を取り込む(import)その1

gnuplot 5.0以降では、C言語で書かれた関数をgnuplotで取り込んで使うための非常に強力なコマンド「import」が使えるようになりました。ここでは、そのimportコマンドの使い方について詳細に解説します。

コンパイラのインストール

importコマンドで読み込めるのは、C言語で書かれたプログラムをコンパイルして得られたライブラリファイルです。importコマンドでライブラリを読み込むことで、C言語で書かれた関数をgnuplotで使えるようになるのです。

※※以下の情報は少し古いです。64bitコンパイルもできるMinGW-W64/MSYS2を使うやり方はその1.5をご覧ください。※※

Windowsユーザの場合、C言語を使える環境が整っていないことがほとんどです。そこで、まずはC言語でプログラムをコンパイルできる環境を準備します。ここでは、無料でかつWindows Nativeな実行ファイルが作れるMinGW/MSYSをインストールする方法を紹介します。これらをインストールすると、C言語だけでなく、Fortran、C++などのいくつかの言語のコンパイラや、Linuxでは普通に使える便利なコマンド(cat、paste、gawkなど)も使えるようになるので、非常に役に立ちます。(cygwinに似ていますが、cygwinよりは機能が限定的である一方、Windows Nativeな実行ファイルが作れるという点では勝っています。)

なお、以下の方法で作るdllは32bitバージョンのgnuplotでしか読み込めません。もし、64bit版をインストールしている場合は、32bit版を追加でインストールするか、その1.5で紹介する方法を使ってください。

  1. MinGWのページに行き、右上の「Download Installer」というボタンをクリックして、インストーラーをダウンロードします。
  2. ダウンロードした「mingw-get-setup.exe」を実行すると以下のような画面が出てくるので、「Install」をクリックします。
  3. 次の画面で、インストール先などを聞かれる。基本的にはそのままでいいと思います。インストールするフォルダを替えるときは、フォルダ名がスペースを含まないようにする必要があります。
  4. 「continue」をクリックすると、パッケージの情報などがダウンロードされるので、しばらく待ちます。
  5. 完了したら「continue」をクリックします。
  6. すると、以下のような「Installation Manager」Windowが出て来ます。
  7. ここでは、インストールする機能を選ぶことができます。右の表の一番左のコラムにある□をクリックして、「Mark for installation」をクリックすると、その機能をマークすることができます。
  8. 必要なものをすべてマークしたら、メニューの「Installation」→「Apply Changes」をクリックしてください。とりあえずは、「Basic Setup」のすべてをインストールすれば十分だと思われます。必要に応じて、後で追加も簡単にできます。
  9. 以下のような画面が出るので、「Apply」をクリックすると、インストールが始まります。
  10. 以下のような画面が出て、インストールが終了するとその下の画面が出ます。「OK」を押すと、Installation Managerに戻りますので、追加でインストールする機能がなければ、終了してください。
  11. スタートメニューの「MSYS」をクリックするか、「C:\MinGW\msys\1.0\msys.bat」(C:\MiGWにインストールした場合。別のフォルダにインストールした場合は、適宜読み替えてください)をダブルクリックすると、以下のようなウィンドウが立ち上がります。
  12. ここで、
    C:/MinGW/bin/gcc --version
    とWindowに打ち込んでみて、下の図のようなメッセージが出ればCのコンパイラがきちんとインストールされています。(C:\MiGW以外のフォルダにインストールした場合は、適宜読み替えてください)
  13. C:\MinGW\bin、C:\MinGW\msys\1.0\binには環境変数pathを通しておいた方がいいです。具体的には「コントロールパネル」→「システム」→「詳細設定」→「環境変数」とたどり、「ユーザー環境変数」のところに「Path」という名前のものがあれば、そこの末尾にセミコロン;をつけてから、以下を追加してください。(コロンとセミコロンの違いに注意)
    C:\MinGW\bin;C:\MinGW\msys\1.0\bin
    もしPathという環境変数がなければ、新しく作成して、上記を記入してください。 これは、ほかのプログラム等から、MinGWやMSYSの便利な機能を使いやすくするための手続きです。

サンプルのコンパイルテスト

MinGWがインストールできたら、まずはgnuplot付属のサンプルプログラムをコンパイルしてみましょう。

  1. まず、gnuplotのsource forgeページからgnuplotのソースファイル(gnuplot-X.X.X.tar.gz)をダウンロードします。
  2. ダウンロードしたファイルを展開します。展開できない場合、適当な解凍ツール(例えばLhaplusなど)をインストールしてから展開させます。
  3. 解凍したフォルダから、「demo」→「plugin」のフォルダの中にサンプルプログラム「demo_plugin.c」や、そのほか必要なファイルが入っています。
  4. 適当な作業用のフォルダ(ここでは「C:\gnuplot\plugin」とします)を作り、そこに「demo_plugin.c」「gnuplot_plugin.h」「plugin.dem」の3つのファイルをコピーします。
  5. gnuplotのソースファイルの中の、「src」フォルダの中にある、「gp_types.h」を作業用フォルダにコピーします。
  6. 「gp_types.h」をテキストエディタ・メモ帳等で開き、40行目にある #include "syscfg.h"という行をコメントアウトします。さらに、代わりにtypedef double coordval;という行を加えます。具体的には、以下のように/**/#include...の行を囲み、その下にtypedef...を加えます:
    /* #include "syscfg.h" */
    typedef double coordval;
    typedefの行の末尾のセミコロンに注意してください。修正ができたら、ファイルを上書き保存します。
  7. gnuplotのソースファイルの中の、「config」フォルダの中にある、「config.mgw」を作業用フォルダにコピーし、ファイルの名前を「config.h」に変更します。
  8. MinGW/MSYSのコンソールを開き、下図のようにcd コマンドを用いて作業用フォルダに移動します。
  9. コマンドラインから
    C:/MinGW/bin/gcc.exe -shared -o demo_plugin.dll demo_plugin.c -DHAVE_CONFIG_H -I.
    と入力して、Enterキーを押すと、コンパイルできます(末尾のドット.に注意)。また、MinGW/MSYSでは二つのCコンパイラがインストールされているため、上記のようにフルパスでコンパイラを指定する必要があります。下図のように何もエラーメッセージが出なければ、コンパイル成功です。
  10. うまくコンパイルできていれば、作業フォルダに「demo_plugin.dll」というファイルができているはずです。
  11. gnuplotで「plugin.dem」を開きます。wgnuplotから「File」→「Demos...」をクリックして、「plugin.dem」を指定すれば開けます。他に、xyzzyのwgnuplot-modeを用いてもいいですし、gnuplotのコンソールからcdしてからloadしてもいいでしょう。なお、上述の方法で作ったdllは32bitバージョンのgnuplotでしか読み込めません。64bit版をインストールしている方は、32bit版を追加インストールしてください。
  12. すると、下図のように、デモがスタートします。
  13. OKをクリックしていくと、デモが進んでいきます。これらがうまく見られれば、c言語でコンパイルした「demo_plugin.dll」ファイルをgnuplotで読み込むのに成功したことを意味しています。

長くなってきたので、その2へ続きます。