共有ライブラリ 
 


コンパイラとインタプリタ

インタプリタ

  • インタプリタは同時通訳.
  • インタプリタがプログラムを一行ずつ実行.
  • 文法エラーがあっても,その手前までは実行する (デバッグが簡単)
  • 遅い.インタプリタがないと動かない.
  • インタプリタがあれば,機種に依存することなく実行できる.

コンパイラ

  • コンパイラ は翻訳家
  • プログラムをマシン語コードに変換する.
  • 早い.コンパイラが無くても,単独で実行可能.
  • 機種(CPU)が違うと動かない(マシン語だから)
  • 一個でも文法エラーがあると,全体の翻訳は失敗する.
  • デバッグが難しい.

Java

  • Javaコンパイラインタプリタの中間
  • Javac はプログラムを中間コードに変換 (コンパイラに似ている)
  • 中間コードをJavaバーチャルマシンが実行する.(インタプリタに似ている)
  • Javaバーチャルマシン があれば,機種に依存することなく実行できる.(インタプリタに似ている)


 


コンパイラとリンカ

  • コンパイラソースコードを翻訳(コンパイル)し,オブジェクトファイルを生成する.
  • リンカ は複数のオブジェクトファイルとライブラリを結合(リンク)し,実行形式のファイルを生成する.
  • Javaコンパイラインタプリタの中間
  ソースファイル → オブジェクトファイル → 実行形式ファイル(ロードモジュール)
                 ↑コンパイラ            ↑リンカ


エラー

  1. エンピカ 食べなさい       (文法エラー.シンタックスエラー.コンパイルエラー)
  2. エンピカ を食べなさい        (結合エラー.リンクエラー.エンピカって何?)
  3. エンピツを食べなさい          (実行エラー.鉛筆は食べられません)


 


ライブラリ

  • 予め用意している命令や変数 (鉛筆,食べなさい)
  • 実行形式のファイルにじかに埋め込む場合 → 静的リンク,スタティックリンク
    • 単体で動作可能.
    • ファイルサイズが大きくなる.
    • 使用メモリが増える.
    • libXXX.a
  • 実行時にライブラリを結合する場合 → 動的リンク,ダイナミックリンク
    • Unix/Linuxでは共有ライブラリ,Windows では DLLと呼ぶ
    • ファイルサイズが小さくてすむ
    • 使用メモリが少なくなる
    • プログラムの変更が簡単
    • 実行時に必要なライブラリが無いと動かない
    • バージョンが少しでも違うと動かない (Windows のDLL地獄)
    • Unix/Linux → libXXX.so    Windows → XXX.dll
    • Unix/Linux では 共有ライブラリのデータベースを作成する
      • データベースの内容のファイル   /etc/ld.so.conf
      • データベースファイル        /etc/ld.so.cache
      • データベースを更新するコマンド   ldconfig
    • 共有ライブラリの場所は LD_LIBRARY_PATH でも指定可能

Last modified: Friday, 18 April 2014, 5:15 PM