c/c++のライブラリーとビルドについて
ということで、c++でのヘッダーライブラリ関係を全部まとめます。
ソースコードをビルドするまでの流れ
プリプロセス(preprocess) #include は、<> 内に指定したヘッダーファイルの中身をソースコード内に組み込むプリプロセッサ指令です。 つまり、定義が書かれていない入出力関係だけが書かれたヘッダーを読み込むことは、プロトタイプ宣言にだいぶ近いものがあると思います。
コンパイル (compile) 入出力関係を保ったまま、ソースコードを
アセンブル (assemble)
リンク (link) 制御のジャンプ先をここで決めるわけです。
ヘッダーとライブラリはセット
関数をオブジェクトファイルにして、ほかのソースコードから呼び出せるようにしたものをライブラリといいます。 ソースコードはライブラリの入出力を知るために、ヘッダーファイルを使います。だから絶対にセットなんです。
3rd partyのライブラリをどうやって使うか?
ライブラリの配布のされ方はいろいろあると思うが、大きく分けて二つに分けられると思う。
- パッケージマネージャーを通してライブラリを配布
- githubでソースが公開されているライブラリを配布 どちらも最終的に使うときには、ヘッダーをインクルードして、ライブラリをリンクするんですが、使えるようになるまでが違います。ってことです。
1. パッケージマネージャーを通してライブラリーを入手する方法
これは、aptとかでライブラリを入手するあれです。 例えば、boost libraryとかは、aptで次のようにインストールできるわけですね。
sudo apt install libboost-all-dev
で、ソースコード上でプログラムを使いたいときは、例えば、
#include<boost/asio.hpp>
でインクルードして、 さらに、ビルド時にライブラリーをリンクするのを忘れないでください。はい。 ただ、boostはどうやらheader-only-libraryということで、リンクする必要はなさそうですね。はい。大丈夫です。
2. githubでソースが公開されているライブラリ
githubからソースコードを持ってきてください。 で、最近は大体cmakeがついていますね。cmakeでMakefileを作って、makeでビルドしてください。 最後に、make installでライブラリとヘッダーのデフォルトのサーチパスにヘッダーとライブラリをおいてくれます。ハイよろしく。