PGPLOTのインストールとコンパイル方法 のバックアップソース(No.1)

Vine Linux 2.6,Vine Linux 3.0へのインストール記録,プログラムのコンパイル方法です.
PGPLOTのインストール
g77のインストール

コンパイル時にフォートランコンパイラの g77がインストールされている必要があるので, g77が入っていない場合はapt-getをコマンドでインストールします.
$ su
# apt-get install gcc-g77

でインストールできるはずです.
ソースファイルの入手

PGPLOTの最新版は5.2.2です.

    * http://www.astro.caltech.edu/~tjp/pgplot/install.html
    * ftp://ftp.astro.caltech.edu/pub/pgplot/

などからpgplot5.2.tar.gzをダウンロードし,適当な場所に保存しておきます.
展開

ここではソースファイルを
/usr/local/src

に展開します(/usr/local以下のディレクトリで作業するにはroot権限が必要です).
$ su
# cd /usr/local/src
# cp 保存場所/pgplot5.2.tar.gz .
# tar xzvf pgplot5.2.tar.gz
makeの準備

つぎに,インストール用のディレクトリとして
/usr/local/pgplot

をつくります.
# mkdir /usr/local/pgplot

このディレクトリにmakefileをつくるため,ソースを展開したディレクトリのdrivers.listというファイルをコピーし,編集します(/usr/local/src/pgplotにmakefileを作ってはいけないようです).
# cd /usr/local/pgplot
# cp /usr/local/src/pgplot/drivers.list .

テキストエディタで drivers.list 開き,編集します.必要なドライバのコメントアウト(行頭の「!」 )を外すと,そのドライバが使えるようになります.どのコメントを外せばいいのか詳しくは知りませんが,最低限以下のものは使えるようにした方がいいようです.

    * /GIF
    * /VGIF
    * /LATEX
    * /PS
    * /VPS
    * /CPS
    * /VCPS
    * /XTERM
    * /XDISP
    * /XWINDOW
    * /XSERV

(PGPLOTでグラフ出力したとき,先頭にVが付いているドライバは, Vが付いていないものと比べて表示が270度回転されます.)以上で下準備ができたので,makemakeを使ってmakefileをつくります.
# /usr/local/src/pgplot/makemake /usr/local/src/pgplot linux g77_gcc
コンパイル

makefileができたらコンパイルします.
# make

PGPLOTをCから呼び出せるように,もうひとつコンパイルします.
# make cpg

エラーが出ずに無事コンパイル終了したら,もう使わないファイルを消します.
# make clean

rootから抜けます.
# exit
環境変数の設定

PGPLOTのライブラリをどこからでも使えるよう,ライブラリのある場所などにパスを通します.
~/.bashrc

というファイル(~/ はホームディレクトリの意味)に以下を記述します.

export PGPLOT_DIR=/usr/local/pgplot
export PGPLOT_DEV=/xserv
export LD_LIBRARY_PATH=/usr/local/pgplot

書いたら
$ source ~/.bashrc

とするか,ログインしなおして環境変数の変更を反映させます.
デモプログラムの実行

では,コンパイル時に/usr/local/pgplotにデモプログラムができていますから,これをを実行して試してみましょう.
$ /usr/local/pgplot/pgdemo1

とすると
Graphics device/type (? to see list, default /xserv):

というメッセージがコンソールに表示されます. ?をタイプすれば使用可能なドライバの一覧が出てきます.そのままEnterを押せばデフォルトのxservで表示されます. xservで実行した場合,仮想ターミナルに

 version=v5.2.2
 state=OPEN
 user=hamu
 now=15-Aug-2004 22:58
 device=
 file=
 type=XSERVE
 dev/type=/XSERVE
 hardcopy=NO
 terminal=NO
 cursor=YES
 Plot dimensions (x,y; inches):     11.20,      8.41
                          (mm):    284.55,    213.70
 Type  for next page:

というメッセージと,XWindow上に

という画面が表示されます.仮想ターミナルでEnterを押せば,つぎつぎにグラフの画面が変わっていきます.他にもデモプログラムはあるので,試してみましょう.デモプログラムのソースは/usr/local/src/pgplot/examples/以下に(言語はFORTRAN), C言語のソースは/usr/local/src/pgplot/cpg/以下にあります.
C言語から使うときのコンパイル方法

デモプログラムを表示させて満足したら,今度は自分でつくったCプログラムから使えるようにします.そのためのコンパイルには少しオプションが必要です.コンパイルには以下のオプションを付け,g77 でやるといいようです(途中改行しません).
$ g77 ファイル名 -I/usr/local/pgplot -L/usr/local/pgplot -L/usr/X11R6/lib -lcpgplot -lpgplot -lm -lX11

うまくいかない場合はオプションを変えていろいろ試してみるといいかもしれません.ライブラリの場所 (-Lではじまる部分) などを確認してみましょう.

このコンパイルラインは長いので,シェルスクリプトかMakefileを作っておくと後々楽です.
シェルスクリプト

一番単純なのはつぎのようなものです.

# !/bin/sh
g77 $1.c -o $1 -I/usr/local/pgplot -L/usr/local/pgplot -L/usr/X11R6/lib -lcpgplot -lpgplot  -lm -lX11

これを g77pgplot という名前で保存し,パスの通ったディレクトリに置きます.そして
$ chmod +x

として実行権限を持たせておきます.そしたら
$ g77pgplot ファイル名(拡張子なし)

でコンパイル可能です.
Makefile

Makefileという名前のファイルをプログラムのソースファイルと同じディレクトリに作っておけば make とタイプするだけで実行ファイルができあがります.ソースファイル名が foo.c なら,つぎのような感じです.

## Compiler, tools and options

OBJS  	= foo.o
TARGET 	= foo

CC 	= g77
CFLAGS 	= -O3 -march=i686 -fomit-frame-pointer -malign-double -funroll-loops -Wall
INCDIRS = -I/usr/local/pgplot
LIBDIRS = -L/usr/local/pgplot -L/usr/X11R6/lib
LIBS 	= -lcpgplot -lpgplot -lm -lX11

## Implicit rules

.SUFFIXES: .c .o

## Build rules

all: $(TARGET)

$(TARGET): $(OBJS)
	$(CC) $(OBJS) -o $(TARGET) $(CFLAGS) $(LIBDIRS) $(LIBS)

## Compile

.c.o: $*.c
	$(CC) -c $*.c $(CFLAGS) $(INCDIRS)

## Clean

clean:
	rm -f $(OBJS) $(TARGET)

foo の部分は実際のソースファイル名に置き換えてください.この例では最適化オプション(-O3 -march=i686 -fomit-frame-pointer -malign-double -funroll-loops)も付けています.
Valid XHTML 1.1! home >
トップ 一覧 検索 最終更新 バックアップ   ヘルプ   最終更新のRSS
Modified by 物理のかぎプロジェクト PukiWiki 1.4.5_1 Copyright © 2001-2005 PukiWiki Developers Team. License is GPL.
Based on "PukiWiki" 1.3 by yu-jiPowered by PHP 5.3.29HTML convert time to 0.003 sec.