Software_Library

☆ライブラリ関数

◆標準Cライブラリ
standard C library

※libc
/libディレクトリにおかれている
Linuxでは libc.so.6
-(シンボリックリンク)->実ファイル

_◇ライブラリバージョン
※glibcのバージョン確認
ls -l /lib/libc-* | more

libc-2.3.*.soならglibc-2.3

※GNU libcの一次情報はinfoにある

_◇標準入出力ライブラリ
stdio : standard I/O library

カーネルレベルのストリームにAPI層を追加し、使いやすくする。

①バッファリング
システムコールでは大きな塊で読み書きし、stdioでいったんバッファリングすることで効率をあげる
⇒書き込む場合は改行が書き込まれた時点でバッファが一杯にならなくても書き込まれる
⇒stdioがアンバッファモードの場合は即座に書き込まれる
<setvbuf()でセット>
⇒stderrはアンバッファモードである

②FILE型
typedefされた型。カーネルのファイルディスクリプタやstdioのバッファなどの内部情報を格納している

③標準入出力 FILE*型変数
stdin
stdout
stderr

_◇標準関数、マクロ、アルファベット順 A-F

_◇標準関数、マクロ、アルファベット順 G-R

_◇標準関数、マクロ、アルファベット順 S-Z、非標準関数などなど

◆ライブラリ形式

_◇静的ライブラリ
ライブラリの中のオブジェクトファイル単位にリンク時に実行可能ファイルにコピーされリンクされる。

アーカイブファイル(.a)
複数のオブジェクトファイルを1つのファイルにまとめたもの。

静的ライブラリの作成例)
% cc -c -o foo.o foo.c
% cc -c -o bar.o bar.c
% ar ruv libfoo.a foo.o bar.o

静的ライブラリのリンク例)
libfoo.aがライブラリのディレクトリにインストールされていること。
%cc -o baz baz.o -lfoo

_◇共有ライブラリ
複数のプロセスでメモリを共有して参照する。

共有ライブラリの作成例)
% cc -fPIC -c -o foo.o foo.c
% cc -fPIC -c -o bar.o bar.c
% cc -shared -Wl,-soname,libfoo.so.0 -o libfoo.so foo.o bar.o

※共有ライブラリのリンクは、静的ライブラリと同じ手順だが、処理は異なる。

_◇ELF
Executable and Linking Format

主にGNU/Linuxで使われるバイナリフォーマット
ヘッダ構造は elf.h に記述されている。

※ファイル先頭の4バイトは
7F 45 4C 46
「45 4C 46」=ELF

_◇COFF
Common Object File Format

_◇PE
Portable Executable

Windowsの実行形式
0000番地 MZ(4D 5A)
0080番地 PE(50 45)

◆wrapper

まわりをAPIで覆って機能を追加する層のこと

◆著名なライブラリ、その他の使用記事

_◇Boost C++ Library
http://www.boost.org/

※BoostライブラリをCmakeする場合の練習記事
ソフトな忘却力(5) CMakeLists.txtにリンク・ライブラリ指定、Boost

_◇getopt

コマンドライン引数の処理
※getoptを使った実習記事が以下に。

ソフトな忘却力(1) リモート接続でLinux Cプログラミング getopt

_◇libconfig

ファイルに書き込まれたコンフィギュレーション設定を読み取る
※libconfigを使った実習記事が以下に。

ソフトな忘却力(2) ラズパイ4でCプログラミング、libconfig

☆ABI
Application Binary Interface

オブジェクトファイルやライブラリファイルが問題なくリンクできるように、必要な規約を定めたもの

①変数型のバイト数
②CPUレジスタの役割
③構造体、共用体のデータ構造
④関数への値の渡し方、関数の返却値の取得方法