ソースコンパイルの詳細

6854 ワード

ソースコンパイルの詳細
  1,configure
    ソフトウェアのソースコードのコンパイルインストールを行う過程で、まず./configureを実行します.では、./configureを実行した後、バックグラウンドではどんな操作をしていますか.
       このステップは一般的にMakefileを生成するために使用され、次のコンパイルの準備に使用されます.configureの後にパラメータを追加してインストールを制御できます.コード:./configure–prefix=/usrは、このソフトウェアを/usrの下にインストールすることを意味します.実行ファイルは/usr/bin(認識/usr/local/binではなく)にインストールされ、リソースファイルは/usr/shareにインストールされます.(デフォルトの/usr/local/shareではありません).最終的にコンパイルに必要なMakefileファイルを生成してプログラムMakeの読み込みに使用し、関連するコンパイラ(通常、コンパイラを呼び出すのはgcc)を呼び出して最終的なバイナリプログラムをコンパイルします.configureスクリプトは、対応する依存環境をチェックする場合(例:依存するソフトウェアのバージョン、対応するライブラリのバージョンなど)通常、pkg-configのツールによって対応する依存環境が検出されます.
  
   
makefile
自動コンパイルとリンクに使用され、1つのプロジェクトには多くのファイルが構成されており、各ファイルの変更によってプロジェクトの再リンクが発生します.--しかし、すべてのファイルを再コンパイルする必要があるのではないでしょうか.makefileはファイルの情報を記録し、リンク時にどのファイルを再コンパイルする必要があるかを決定することができます. 
    pkg-configは、システムにインストールされているライブラリファイルの情報を取得するために使用されます.典型的には、ライブラリのコンパイルと接続として使用されます.一般的に、ライブラリのヘッダファイルが/usr/includeディレクトリにない場合、コンパイル時に-Iパラメータでパスを指定する必要があります.同じライブラリが異なるシステム上で異なるディレクトリの下にある可能性があるため、ユーザーがライブラリをインストールするときにライブラリを異なるディレクトリにインストールすることもできますのディレクトリの下にあるので、同じライブラリを使用しても、ライブラリのパスの違いにより、-Iパラメータで指定されたヘッダファイルのパスと接続時に-Lパラメータで指定されたlibライブラリのパスが異なる可能性があり、その結果、コンパイルコマンドインタフェースの不統一を招くことになる.コンパイル、接続の不一致により、同じプログラムが1台のマシンcopyから別のマシンに移行するを選択すると、問題が発生する可能性があります.
pkg-configは、コンパイル接続インタフェースの不統一問題を解決するためのツールです.
その基本思想:pkg-configはライブラリから提供された.pcファイルを通じてライブラリの各種必要な情報を獲得し、バージョン情報、コンパイルと接続に必要なパラメータなどを含む.必要に応じてpkg-configから提供されるパラメータ(-cflags,–libs)を選択して、必要な情報を抽出してコンパイルと接続のために使用します.これにより、ライブラリファイルがどこにインストールされているかにかかわらず、ライブラリに対応する.pcファイルを通じて正確に位置決めすることができ、同じコンパイルと接続コマンドを使用して、コンパイルと接続インタフェースを統一することができます.
主な機能は次のとおりです.
<1>ライブラリのバージョン番号をチェックします.必要なライブラリのバージョンが要求を満たしていない場合は、エラー情報を印刷して、エラーバージョンのライブラリファイルに接続しないようにします.<2>マクロ定義、ヘッダファイルのパスなどのコンパイル前処理パラメータを取得します.<3>ライブラリとその依存する他のライブラリの場所、ファイル名、その他の接続パラメータなどのコンパイルパラメータを取得します.<4>依存する他のライブラリの場所に自動的に追加ライブラリの設定.
    例:
デフォルトでは、pkg-configをサポートする各ライブラリに対応する.pcファイルはインストール後、インストールディレクトリのlib/pkgconfigディレクトリの下にあります.たとえば、Glibを/opt/gtkディレクトリにインストールした場合、このGlibライブラリに対応する.pcファイルは/opt/gtk/lib/pkgconfigディレクトリの次のglib-2.0.pcというファイルです.
prefix=/opt/gtk/exec_prefix=${prefix}libdir=${exec_prefix}/libincludedir=${prefix}/include
 glib_genmarshal=glib-genmarshalgobject_query=gobject-queryglib_mkenums=glib-mkenums
 
Name: GLib
Description: C Utility Library
Version: 2.12.13
Libs:-L${libdir}-lglib-2.0Cflags:-I${includedir}/glib-2.0-I${libdir}/glib-2.0/include

pkg-config –list-all
使用可能なすべてのパッケージがリストされます.場所は/usr/lib/pkgconfigです.このディレクトリの下には様々な.pcファイルがあります./usr/local/lib/pkgconfigの下にあるlibname.pcファイルです.新しいソフトウェアでは、通常、.pcファイルがインストールされます.自分で作成することはできません.環境変数PKG_CONFIG_PATHを設定して.pcファイルのパスを探します.pkg-configの–cflagsパラメータを使用すると、コンパイル時に必要なパッケージを指定できます.を選択し、–libsパラメータを使用すると、接続時のオプションを指定できます.たとえば、sample.cのプログラムがGlibライブラリに使用されていると仮定すると、次のようにコンパイルできます.
$gcc-c`pkg-config--cflagsglib-2.0`sample.c

次に、次のように接続します.
$gccsample.o-osample`pkg-config--libsglib-2.0`

または、上記の2つのステップを次のステップにマージすることもできます.
$gccsample.c-osample`pkg-config--cflags--libsglib-2.0`

pkg-configツールを使用してライブラリのオプションを取得するため、ライブラリがどのディレクトリにインストールされているかにかかわらず、同じコンパイルと接続コマンドを使用することができ、コンパイルと接続インタフェースの統一をもたらすことがわかります.
pkg-configツールを使用してライブラリのコンパイルと接続パラメータを抽出するには、2つの基本的な前提があります.
<1>ライブラリ自体はインストール時に対応する.pcファイルを提供する必要があります.そうしないライブラリは、pkg-configツールの使用をサポートしていないことを示しています.<2>pkg-configは、この.pcファイルをどこで探すかを知らなければなりません.
      PKG_CONFIG_PATH
環境変数PKG_CONFIG_PATHは、.pcファイルの検索パスを設定するためのものであり、pkg-configは、指定された.pcファイルが見つかるまで設定パスの順に検索される.これにより、ライブラリのヘッダファイルの検索パスの設定は、実際には.pcファイルの検索パスの設定になる.
      使用するライブラリをインストールした後、Glibなどの.pcファイル、glib-2.0.pcなどの.pcファイルを/usr/lib/pkgconfigディレクトリにコピーすること、環境変数PKG_CONFIG_PATHを設定してglib-2.0.pcファイルを追加する検索パスです.
環境変数PKG_CONFIG_PATHを追加するには、bashで次のように設定します.
$exportPKG_CONFIG_PATH=/opt/gtk/lib/pkgconfig:$PKG_CONFIG_PATH

       このように設定すると、Glibライブラリの他のプログラムやライブラリを使用してコンパイルするときにpkg-configは、まず/opt/gtk/lib/pkgconfigというディレクトリにglib-2.0.pcを探すことを知っています(GTK+や他の依存ライブラリの.pcファイルもここにコピーされ、まずここで対応する.pcファイルを検索します)..その後、pkg-configでライブラリのコンパイルと接続パラメータを抽出し、コンパイルと接続時に使用できます.
また、環境変数の設定は現在の端末ウィンドウにのみ有効であることに注意してください.上記の設定が行われていない端末ウィンドウになると、pkg-configは新しくインストールされたglib-2.0.pcファイルが見つからず、後で行うインストール(Glib以降のAtkのインストールなど)ができなくなる可能性があります.
      永続的に有効にするには、環境変数を/etc/profileに書き込むことができます.
    2,make
     このステップはコンパイルです.ほとんどのソース・パッケージはこのステップでコンパイルされます(もちろん、perlまたはpythonで作成されたソフトウェアではperlまたはpythonを呼び出してコンパイルする必要があります).make中にerrorが発生した場合は、エラー・コードをメモし(最後行だけではないことに注意してください)、開発者にbugreportを送信できます.(一般的にINSTALLに提出先がある)、あるいはあなたのシステムに依存ライブラリが少なくなったなど、エラーコードを自分でよく研究する必要があります.
makeの役割はソースコードのコンパイルを開始することであり、いくつかの機能の提供である.これらの機能は彼のMakefile設定ファイルから関連する機能を提供する.例えばmake installは一般的にインストールを行うことを表し、make uninstalはアンインストールであり、パラメータを付けないのはデフォルトでソースコードのコンパイルを行う.makeはLinux開発キットの中で自動化コンパイルを行う制御プログラムであり、彼はMakefileで作成されたコンパイル仕様により、gcc、ldを自動化し、必要なプログラムを実行してコンパイルするプログラムを呼び出します.一般的に、彼が使用するMakefile制御コードは、configureという設定スクリプトによって与えられたパラメータとシステム環境に基づいて生成されます.
   3,make install
   このコマンドはインストールに使用されます(もちろん、make checkまたはmake testを実行してテストする必要があるソフトウェアもあります).このステップでは、root権限が必要です(システムにファイルを書き込むためです).
   glibcのアップグレード方法
   私たちはいくつかのソフトウェアをコンパイルしてインストールする時、glibcをアップグレードするようにヒントを与えて、ソースコードのコンパイルを通じてglibcをアップグレードしましたが、やはり元と同じ間違いを報告していることに気づきました.これはなぜですか?
   ソースコードコンパイルインストールのglibcをアップグレードするため、ソフトウェアをインストールするとき、依存環境をチェックするときにglibcに対応するライブラリが見つからない場合は、glibcをインストールするライブラリを手動で指定する必要があります.glibcをインストールするときに/opt/glibcにインストールすると、pkg-config-puthの環境変数を直接設定できます.
    $export=/opt/glibc/lib/pkgconfig.
    ソフトウェアのインストールを続行すればいいです!