インクルードディレクトリとは何ですか?

インクルードディレクトリとは何ですか?

私はソフトウェア開発が初めてで、ソースから約20個程度のプログラムと依存性をコンパイルする過程でおおよそのパターンを見ましたが、よく理解できませんでした。私はあなたがこれについていくつかの情報を明らかにできることを願っています。

ルートアクセスなしでSLC6システムからSSH経由で接続しています。すべてのソフトウェア依存関係をインストールする必要があり、最も難しいのは、正しい場所に接続することです。

例: log4cpp をインストールする必要があります。タルボールをダウンロードして解凍しました。

./autogen.sh (if there isn't this one, just continue to next)
./configure
make

そのため、ソースコードとともにフォルダ自体にインストールされ、正しい方法で呼び出すことができるまで休止状態になります。

その後、ライブラリを指定し、依存関係のあるディレクトリを含めるように要求する別のプログラムをインストールする必要があります。

--with-log4cpp-inc=
--with-log4cpp-lib=

一部のソースコードのコンパイルでは、このフォルダにはlib、bin、inc、またはインクルードディレクトリがあります。完璧です!一部の人にとっては、このフォルダにはlibとincディレクトリしかありません。一部の人にとっては、フォルダにincディレクトリしかありません。

誰もが見つけやすいクールなフォルダを持っていれば問題ありません。しかし、log4cppに問題が頻繁に発生します。

locate log4cpp.so

nullを返す(libディレクトリに.soファイルがありますか?それともありますか?)

だから問題があります。この特別なケースでは、ライブラリディレクトリがないため、見つかりません。しかし、毎回問題がどのように解決されるのか、そして背景情報を知りたいのですが。しかし、私のインターネット検索技術では、ライブラリ、インクルード、およびbin環境変数がどのように機能するかを検索しても結果が返されないようです。また、プログラムに関するドキュメントを探しましたが、次のような質問があるようです。 「libディレクトリはどこにあり、includeディレクトリはどこにありますか?binディレクトリはどこにありますか?」通信する。

だから:

  • インクルードディレクトリとは何ですか、何をして、インクルードして検索するのですか?
  • ライブラリディレクトリは何で、何を実行し、何が含まれているのか、そしてどのように見つけることができますか?毎回役に立つコマンドは何ですか?
  • バイナリディレクトリとは何ですか、何をするのか、何が含まれているのか、そしてどのように見つけるのですか?

答え1

ライブラリファイルには通常、lib;という接頭辞が付きます。locateより具体的でない場合、コマンドはより成功する可能性がありますlocate "*log4cpp*"

共有ライブラリ(.soファイル - 通常はそうですが、必ずしもそうではありません。以下の「ライブラリディレクトリとは何ですか?」を参照)に関連して通常は適切なパスを見つけることができますが、whereisワイルドカードはサポートされていないため、名前を正確にインポートする必要があります。サフィックス(whereis liblog4cpp)。 ldconfig -pより良いのは、馬の口から直接情報を取得するためです(ldconfig共有ライブラリを管理するリンカーが使用するキャッシュ構成)。

ldconfig -p | grep log4cpp

このライブラリをビルドするには、ディストリビューションにデフォルトでインストールされない可能性がある関連インクルードヘッダも必要です。これらの製品は別々またはパッケージされてい-devます-devel

インクルードディレクトリとは何ですか?

インクルードディレクトリには、ソースコードで次のように使用されるCおよびC ++ヘッダファイルが含まれています。

#include <foobar.h>
#include <foo/bar.h>

階層で構成され、その一部は(C / C ++)言語標準によって指定されています。ただし、階層の最上位パスはシステムによって異なり、コンパイラ/プリプロセッサに知られています。たとえば、2つのファイルはと/usr/include/foobar.hにあります/usr/include/foo/bar.h

Linux システムには通常、2 つの最上位インクルードディレクトリがあります/usr/include/usr/local/include後者が優先します)。

コンパイルされたソフトウェアはインクルードファイルを必要とせず、ファイルを生成するためにのみ必要です。したがって、libfoobarディストリビューションパッケージからインストールすると入手できますが、パッケージにはlibfoobar.so含まれません(名前付けルールはディストリビューションによって異なります)。foobar.hlibfoobar-dev

図書館ディレクトリとは何ですか?

ライブラリディレクトリには、動的(共有とも呼ばれる)と静的という2種類のライブラリが含まれています。ほとんどは電子です。これはおおよそのインクルードディレクトリに対応しますが、通常はより多くのディレクトリ(、、など、/lib一部/lib64は他のディレクトリへのシンボリックリンクである可能性があります)/usr/libがあります。/usr/local/lib

共有ライブラリは、実行時に使用されるライブラリです。実行可能ファイルが共有ライブラリにリンクされている場合、プログラムの実行に必要なだけ、そのライブラリの一部がすべてメモリにロードされます。すでにライブラリを使用している項目はすでにメモリにあるため、再ロードする必要はありません。共有部分は読み取り専用なので、両方のアプリケーションは互いに干渉しません。通常、共有ライブラリはサフィックスを使用します.so

静的ライブラリはコンパイル時に実行可能ファイルに組み込まれ、後で実行可能ファイルを実行するためには必要ありません。ライブラリを他のアプリケーションと共有できないため、RAMを大量に消費する可能性があるため、これはあまり一般的ではありません。通常、静的ライブラリはサフィックスを使用します.a

バイナリディレクトリとは何ですか?

バイナリディレクトリには、lsなどの実行可能プログラムファイルが含まれていますfirefox。 *nix 世界の実行ファイルはサフィックスを使用しません。これらのディレクトリは通常変数にあります$PATH。それ以外の場合は常に入力する必要があります/usr/bin/ls。または、コマンドを使用して、入力時に使用するls実行可能ファイルを決定できます。whereiswhich


.configureライブラリを指定するか、ディレクトリを含めることが許可されている場合、これは通常、非標準位置でのみ必要です。 このオプションなしで試してください。見つからない場合は使用してください--with-inc=

答え2

ソースからパッケージをインストールする標準プロセスは次のとおりです。

  1. ./configure
  2. make
  3. オプション:make testまたはmake check
  4. make install

DebianやFedoraなどのバイナリディストリビューションでは、上記の4つのコマンドが中央の場所で実行され、次にディストリビューションマネージャがパブリッシュするためにパッケージ化され、管理者はそれをアップデートまたは新しいパッケージとしてパッケージマネージャにダウンロードします。 GentooやArchなどのソースベースのディストリビューションでは、パッケージマネージャはリストされた順序でリストされた4つのコマンドを実行します。

どちらの場合も、追跡する依存関係を管理することは、システムのパッケージマネージャソフトウェアに依存します(システムにある場合)。それ以外の場合は、手順4がありません。ステップ4を実行した後、構成を通じてコン​​パイルした他のすべてのパッケージのlibdirsおよびbindirsスクリプトを見つけることができます。

関連情報