glib の内部依存関係の調査

今回は備忘録です。
現在のglib2の内部依存関係の調査。

$ rpm -q glib2
glib2-2.26.1-2m.mo7.i686
$ rpm -ql glib2-devel | grep pkgconfig
/usr/lib/pkgconfig/gio-2.0.pc
/usr/lib/pkgconfig/gio-unix-2.0.pc
/usr/lib/pkgconfig/glib-2.0.pc
/usr/lib/pkgconfig/gmodule-2.0.pc
/usr/lib/pkgconfig/gmodule-export-2.0.pc
/usr/lib/pkgconfig/gmodule-no-export-2.0.pc
/usr/lib/pkgconfig/gobject-2.0.pc
/usr/lib/pkgconfig/gthread-2.0.pc

pkg-configを使った調査

glib本体

glib-2.0.pc
$ pkg-config --libs glib-2.0
-lglib-2.0  

自分だけ。

gmodule

gmodule-2.0.pc
$ pkg-config --libs gmodule-2.0 
-Wl,--export-dynamic -pthread -lgmodule-2.0 -lrt -lglib-2.0

glib-2.0 に依存。

gthread

gthread-2.0.pc
$ pkg-config --libs gthread-2.0 
-pthread -lgthread-2.0 -lrt -lglib-2.0

glib-2.0 に依存。

gobject

gobject-2.0.pc
$ pkg-config --libs gobject-2.0 
-pthread -lgobject-2.0 -lgthread-2.0 -lrt -lglib-2.0

gthread-2.0 glib-2.0 に依存。

gio

gio-2.0.pc
$ pkg-config --libs gio-2.0
-pthread -lgio-2.0 -lgobject-2.0 -lgmodule-2.0 -lgthread-2.0 -lrt -lglib-2.0

gobject-2.0 gmodule-2.0 gthread-2.0 glib-2.0に依存。

ということで、
最初は glib-2.0 だけでできることを調査。
次に、 gmodule-2.0 と gthread-2.0 の調査。
さらに gobject-2.0 の調査。
最後に gio-2.0 の調査。


しかし、glib-2.0 だけでも symbol がいっぱいある。

$ readelf -s libglib-2.0.so.0.2600.1 | head -2

Symbol table '.dynsym' contains 1566 entries:
$ readelf -s /usr/lib/libglib-2.0.so.0.2600.1 | tr -s " " | cut -f 9 -d " " | grep "g_" | sort -u
g_access
g_allocator_free
g_allocator_new
…
g_vsnprintf
g_vsprintf
g_warn_message

先は長くなりそうだな。基本的に

readelf -s /usr/lib/libname.so.? | | tr -s " " | grep -v "UND" | cut -f 9 -d " " | sort -u

これぐらいでいいのかな?


以下蛇足。

その他の情報

gio-unix-2.0.pc
$ pkg-config --libs gio-unix-2.0 
-pthread -lgio-2.0 -lgobject-2.0 -lgmodule-2.0 -lgthread-2.0 -lrt -lglib-2.0

gmodule-export-2.0.pc
$ pkg-config --libs gmodule-export-2.0 
-Wl,--export-dynamic -pthread -lgmodule-2.0 -lrt -lglib-2.0  

gmodule-no-export-2.0.pc
$ pkg-config --libs gmodule-no-export-2.0 
-pthread -lgmodule-2.0 -lrt -lglib-2.0  

基本的には使わないだろうな〜。