ローカル環境向けディレクトリ /usr/local にインストールすれば、全てのユーザーがソフトウェアを使用できます。
または、ユーザのホームディレクトリなどを使いましょう。
通常は、下の項目の手順で実行できます。が、異なる場合もあります。
事前にソフト付属のドキュメント (README, INSTALL など) やオンラインドキュメントを見て実行しましょう。
ホームディレクトリとかでアーカイブを展開。
tar zxvf [圧縮されたファイル]
tar jxvf [圧縮されたファイル]
configure スクリプトがある場合は、
./configure --help
と入力してオプションを確認して、オプションを設定する。
./configure [オプション]
/usr/local にインストールするなら --prefix=/usr/local、ホームディレクトリなら --prefix=$HOME という感じでオプションをつける。
システムを一通り調査したあとでMakefileができます。
Makefile のみの場合は、Makefile の中を確認して必要なら編集する。
ビルドは README などで指示がなければ、make と入力するだけです。ソフトの規模(とマシンの速度)によって数分〜数時間と時間にバラつきがあるので気長に待ちましょう。
ビルドが終了するとシェルに戻ります。シェルに戻っていても、直前に *** Error *** など表示されていれば、途中でエラーが出て中断しているので、README を読み直したり、ソースや Makefile などを見て原因を探ってみてください。
/usr/local に保存するなら root で作業する必要があるので、su で root になって make install でインストール。
ホームディレクトリならそのまま make install と入力します。
以下のようなエラーが出る場合。
hoge: error while loading shared libraries: libfuga.so.0 : cannot open shared object file: No such file or directory
依存関係や設定問題を自動で解決できるパッケージシステムではこういった問題はあまり発生しませんが、ソースからコンパイルしてライブラリを入れた場合に起きることがたまにあります。
/etc/ld.so.conf にライブラリの存在するディレクトリ (ソースから入れた場合は /usr/local/lib) が記述されていますか? Red Hat系のディストリビューションでは記述がない場合があります。
記述がない場合は追加して、root で ldconfig と入力しましょう。ライブラリのキャッシュが再構築されて /usr/local/lib にある共有ライブラリも見つけられるようになります。
まあ、以下の内容が書いてあれば大抵の場合は大丈夫でしょう。
/lib /usr/lib /usr/X11R6/lib /usr/local/lib
diff コマンドで差分を調べられます。二つのディレクトリにあるファイルの差分を調べたい時は -r オプションをつけます。
diff | コマンド |
2つのファイルの差分を調べる | $ diff ファイル1 ファイル2 |
2つのディレクトリの差分を調べる | $ diff -r ディレクトリ1 ディレクトリ2 |
ソースを展開したディレクトリで patch -p1 < パッチのファイル名 と入力。これでだいたいok。
gzipやbzip2で圧縮されていたら
zcat パッチ | patch -p1 #拡張子*.gz bzcat パッチ | patch -p1 #拡張子*.bz
で、たぶん大丈夫。
ソースから入れたソフトはインストールしたファイルを一つ一つ手で消すのがキホソ。 がんがれ。;)
楽するための Tips
paco を使うと、make install でインストールしたソフトを削除できます。
参考: paco——インストールの監視
make に -n オプションをつけて make -n install と入力するとインストールで何が実行されるかがわかる。
ソースの Makefile に uninstall という行があれば、make uninstall が使えるかもしれない。
ITmedia の解説 を参考に Makefile を読んでみてください。
./configure のときに --prefix=/usr/local/ソフト名 と指定して、ソフト毎のディレクトリを作っておく。ディレクトリごと消してアンインストール。
/opt/[ソフト名] とかでもよし。
rpm / deb アーカイブ化し、パッケージシステムを使ってインストールする。
RPMファイルの作り方など参照。
簡単にパッケージ化してくれる CheckInstall というのもあります。
やり方は場合による。
そのまま新バージョンを上書きインストールすれば問題なく動作する場合も多いが、旧バージョンと新バージョンの変更点が大きい場合は旧バージョンのアンインストールが必要かもしれない。
基本は、
gcc -o test test.c
主なオプションは、
コンパイラは、字句解析と構文解析からパースツリー(トークンを葉とする構文の構造を表した木構造)を作り、最適化してアセンブリ言語コードを出力する。中間言語表現として3番地コード(3つの番地だけのコードに直す)が知られる。字句・構文解析にはyaccとlexを用いる場合が多い。新しい言語を作りたいのなら、RustのようにLLVMのバックエンドを用いてもいいだろう。
Makefileは
作成されるファイル : 依存ファイル 作成方法
と書く。 たとえば、
test : main.o test1.o test2.o gcc -o test main.o test1.o test2.o main.o : main.c gcc -c main.c test1.o : test1.c gcc -c test1.c test2.o : test2.c gcc -c test2.c
とすれば、main.cが変更されると以下だけを実行する。
gcc -c main.c gcc -o test main.o test1.o test2.o
lddコマンドでいける。
ldd /bin/ls
lddコマンドは、バイナリが依存する共有ライブラリを表示するコマンド。これに対してldconfigは共有ライブラリのキャッシュを更新するコマンド。共有ライブラリの設定を変えた時はldconfigを実行する。
静的リンクのライブラリは、ビルド時にプログラムに物理的に結合される。動的リンクでは、別々のオブジェクトが作られ、実行時に動的リンクローダが結合する。基本的に、動的リンクを用いるのが一般的。
straceコマンドでいける。