Perlテックブログ

ITエンジニアの成長意欲を刺激する技術考察、モジュール開発の日記。Perlイベントや国内や海外のPerlの記事の紹介。

C言語のソースコードとヘッダファイルとライブラリのパスの仕様化する

C言語は本質的に自由な言語で、ソースコードやヘッダファイルやライブラリをどこに配置するのかということが、決まっていません。

LinuxなどのOSが、どこにソースコードとヘッダファイルとライブラリを配置するかということを、独自にデザインしている。

たとえば、ユーザーが独自にダウンロードしたり、インストールしたものは、次のディレクトリに配置されると想定している。

# ソースファイル
/usr/local/src

# ヘッダーファイル
/usr/local/include

# ライブラリ(静的なもの(.a)と共有ライブラリ(.so)の両方)
/usr/local/lib

C言語におけるコンパイルとリンクの基礎的な概念

ソースコードとか、ヘッダーとか、コンパイルとか、ライブラリとか、ごちゃごちゃしてて、わけわかんない!!!」

ちょっとこれだけ読んどいて!

コンパイラ

C言語において、覚えておいてほしいと思うのは、ライブラリが存在しなくっても、ソースファイルとヘッダファイルでコンパイルはできるということ。

ヘッダには、なんでも書けるのだけれど、うまい設計では、ソースコードから参照する関数名や構造体名やグローバル変数名などの、名前の情報だけが記述されている。実装はなく、完全に名前だけが記述される。

こういう風に設計しておくと、ソースファイルは、ヘッダファイルをインクルードすることで、名前解決を行ってコンパイルをすることができる。

リンカ

リンカは、コンパイルされたソースコードとライブラリを結びつける役割を果たす。

リンカは、定義された名前を元にして、他のコンパイルされたソースコードとライブラリの中から、名前に対応する実装を探す。そして、それを結合する。

Perlにも、Linuxのような標準的なC言語ソースコード配置を持ってきたい

たとえば、以下のような配置で構成したい。それぞれのモジュールのディレクトリの中に標準的なC言語ソースコード配置がある形。


f:id:perlcodesample:20180604072615p:plain