右も左もわからないUNIX初心者のための Eva-Bin 講座


 よ〜く考えてみたら、私のページのプログラムのうち、 UNIX 用のは UNIX の初心者の方にはドキュメントすら みれないような作りになってました。ってことで、 まだ、UNIX を習いはじめたばっかりの学生さんや、 研究室に UNIX の機械があるんだけど、さわったこと ないや、という方々のために、プログラムが できるまでを簡単にせつめいします。

アーカイブって何ですか?

 パソコン通信とかで実行プログラムや必要なファイルを まとめて圧縮するのに、LHA という有名なソフトが よくつかわれています。UNIX 用もありますが、 UNIX でもっと一般的なのは、tar + gzip という 組合せ。LHA がまとめる機能と圧縮する機能の 両方を持っているのに対して、tar はまとめる、 gzip は圧縮する機能のみをもっているソフトです。 おそらく、世の UNIX 機でこれらが入ってないものは そう、ないでしょう。
 Evangelion Binaries ではパソコン用は LHA、 UNIX 用は tar+gzip でかためてあります。この プログラムのばらし方を説明します。evatimer-1.3.0.tar.gz を 例にすると、後ろの .gz がgzip でかためられていることが、 .tar がtar でまとめられていることがわかります。 そこで、まず、圧縮を展開します。evatimer-1.3.0.tar.gz を ひろってきて、ころがしてあるディレクトリで
   gunzip evatimer-1.3.0.tar.gz
とします。ちょっとすると、evatimer-1.3.0.tar という ファイルにばけているはずです。つぎに、分解します。
   tar -xvf evatimer-1.3.0.tar
すると、ずらずらとファイル名が出てきて、evatimer130 という ディレクトリができます(ディレクトリ名はプログラムに よってちがいます)。これでバラバラのファイルになりました。 このなかにドキュメントとかが入っています。ここまでを おさらいすると
  Melchior:kumagai% ls
  evatimer-1.3.0.tar.gz
  Melchior:kumagai% gunzip evatimer-1.3.0.tar.gz
  Melchior:kumagai% ls
  evatimer-1.3.0.tar
  Melchior:kumagai% tar -xvf evatimer-1.3.0.tar
  x evatimer130/Makefile, 410 bytes, 1 tape blocks
  x evatimer130/evatimer.cc, 6959 bytes, 14 tape blocks
  x evatimer130/evatimer.doc, 9082 bytes, 18 tape blocks
  x evatimer130/evatimer.hsp, 699 bytes, 2 tape blocks
  x evatimer130/evatimer.mag, 10263 bytes, 21 tape blocks
  x evatimer130/lcdisp.cc, 193 bytes, 1 tape blocks
  x evatimer130/lcdisp.h, 780 bytes, 2 tape blocks
  x evatimer130/magload.cc, 5964 bytes, 12 tape blocks
  x evatimer130/evtmreal.mag, 25721 bytes, 51 tape blocks
  x evatimer130/evtmreal.hsp, 698 bytes, 2 tape blocks
  x evatimer130/Imakefile, 648 bytes, 2 tape blocks
  x evatimer130/borderl.mag, 14971 bytes, 30 tape blocks
  x evatimer130/borderl.hsp, 251 bytes, 1 tape blocks
  x evatimer130/borderl.cc, 2704 bytes, 6 tape blocks
  x evatimer130/lcdisp_l.cc, 13437 bytes, 27 tape blocks
  x evatimer130/lcdisp_p.cc, 14286 bytes, 28 tape blocks
  x evatimer130/borderl.doc, 1243 bytes, 3 tape blocks
  Melchior:kumagai% ls evatimer130/
  Imakefile       borderl.hsp     evatimer.hsp    lcdisp.cc       magload.cc
  Makefile        borderl.mag     evatimer.mag    lcdisp.h
  borderl.cc      evatimer.cc     evtmreal.hsp    lcdisp_l.cc
  borderl.doc     evatimer.doc    evtmreal.mag    lcdisp_p.cc
  Melchior:kumagai% 
と、なります(Melchior:kumagai% はシェルのプロンプト)。

コンパイルって何ですか

 パソコン用のプログラムにも、98用とかDOS/V 用とかいろいろ あるように、UNIX が走っている機械にもいろいろ種類がありますし、 UNIX 自体もすべて同じ、というわけではありません。パソコンなら 種類がそう多いわけではないので、いくつか実行ファイルをつくって おくという手もありますが、UNIX は種類が多いので、そういう わけにもいきません。
#Netscape なんかは実行ファイルをたくさん作ってるから、自分の機種のを もらってくればいいだけ。

そこで、一般にはソースプログラム(C言語でかかれてたりする)の 形で配布して、使う人のところでコンパイルして、実行ファイルに する、ということになります。
 これがまた、くせもので、UNIX に互換性がない部分が あったりして、おなじプログラムがどこでもコンパイル できるとは限らないですし、コンパイルできても、 動くかどうかがわかりません。と、いうことで、 プログラムごとに対処の仕方がいちおうドキュメントに 書いてあります。ドキュメント見てもわからないという場合には メイル下さい。できるかぎり、なんとかして差し上げます。

 さて、コンパイルの仕方は(うまくいくときは)いたって簡単です。 先ほどできたディレクトリに cd して、
   make
とするだけです。エラーが出なければ、できあがり。実行する だけです。ここでエラーが出たときには、
   xmkmf
   make
としてみて下さい。コンパイルエラーとかがなくなるかも知れません。 これでも、実行してみて動かない時は、 ドキュメントにある対処方法をためしてみてください。 機械によって、それぞれお約束があることもあるので、 一番手っ取り早いのは、その機械に精通してるひとや、 管理者の人をだきこむことです。そのひとが、こっちの 世界の人だったら「らっき〜:)」ってお願いしちゃいましょう。 で、実際の手順です。

  Melchior:kumagai% cd evatimer130/
( Melchior:kumagai% xmkmf                             )  ←必要なら
( mv Makefile Makefile.bak                            )
( imake -DUseInstalled -I/usr/local/lib/X11/config    )
  Melchior:kumagai% make
  gcc -c -g evatimer.cc
  evatimer.cc: In function `int gettimer()':
  evatimer.cc:71: warning: implicit declaration of function `int gettimeofday(...)'
  gcc -c -g lcdisp.cc
  gcc -c -g magload.cc
  gcc -g -o evatimer  evatimer.o lcdisp.o magload.o -lX11
  Melchior:kumagai% 
なんか、あやしげな warning がでてますが、この程度なら気にしなくても 普通は動きます (^^;
ってことで、簡単ですが、実行ファイルの作り方でした。これだけで うまくいったあなたは幸せです(おそらく、SunOS4.? なんでしょう)。 一発でうまくいくとは限りませんが、あるていど動かすための 知識は先人たちのおかげでたまってきてますので、それを 参考にチャレンジして下さい。