☆ライブラリ関数
◆標準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
_◇標準関数、マクロ、アルファベット順 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レジスタの役割
③構造体、共用体のデータ構造
④関数への値の渡し方、関数の返却値の取得方法