実に久しぶりに、UNIX-Cで .o への外部参照や .so 内のファイルへの参照時のextern周りを弄ることになった。
で。
綺麗サッパリ忘却してる自分がいる。
・・・あれほど入れ込んでいたのは、一体・・・。い、いや、そもそも大学3,4年次に集中して頭にたたき込んだり実験してて、それからはや3年が過ぎようとしているのだ・・・。無理もない。使ってないのだから。っつーか、実際問題「.so内からexternして取り込んでいる変数は、プロセス間で共有されるか」という点については以前から気にはなっていたけど実験していなかった。
というわけで、単なる復習用の初級レベルサンプル以外の何者でも無いんだけど一応UP。
添付ファイル/060910231159_c0s.tar.gz
添付ファイル中の"c01", "c02"については、普通に「オブジェクトファイルでリンク("c01")」「共有オブジェクト(.so)としてリンク("c02")」の実験というか復習。
最後に、.so内の変数はプロセス毎に共有されるのか?というわけで、c02のmainを複数同時に動かせるよう、sleepとループ入れただけのが"c03"。
結果として、変数は共有されず、プロセス毎にカウントアップされていった。
ついでにMakefileを書くのにちろちろWeb調べてたら、
http://lagendra.s.kanazawa-u.ac.jp/ogurisu/manuals/make-intro/suffix.html
に、
SRC=$(wildcard *.c) OBJ=$(SRC:.c=.o)
と書けそうなサンプルが。というわけで、"c01"のMakeはそれ使ってます。("c02", "c03"になっちゃうと、面倒くさいのでターゲット毎にMakefile分けたので使ってない・・・。)
以上。
コメント