Re: Unused libSM and libICE (was: Re: RFS: xiterm+thai)
On Tue, Apr 1, 2008 at 3:04 PM, Theppitak Karoonboonyanan
<thep@linux.thai.net> wrote:
>
> On Mon, Mar 17, 2008 at 4:16 PM, Paul Wise <pabs@debian.org> wrote:
>
> > dpkg-shlibdeps: warning: debian/xiterm+thai/usr/bin/xiterm+thai
> > shouldn't be linked with libSM.so.6 (it uses none of its symbols).
> > dpkg-shlibdeps: warning: debian/xiterm+thai/usr/bin/xiterm+thai
> > shouldn't be linked with libICE.so.6 (it uses none of its symbols).
>
> 'ldd -u -r /usr/bin/x*' shows that xiterm+thai is not the only
> one. Many other X apps have this problem as well.
Update: I've run this simple script to check all executables
and shared libraries installed in my machine which are linked
to libSM or libICE without using them:
---8<---
$ cat check-sm-ice
#!/bin/sh
check_sm_ice()
{
f=$1
unused=`ldd -u -r $f 2>/dev/null`
if echo $unused | grep libSM.so >/dev/null 2>&1 ||
echo $unused | grep libICE.so >/dev/null 2>&1
then
pkg=`dpkg -S $f | cut -d: -f1`
echo "$pkg:$f"
fi
}
for f in `find /usr/lib/ -name '*.so.*' -type f -print`; do
check_sm_ice $f
done
for f in `find /usr/bin/ -type f -print`; do
check_sm_ice $f
done
$ ./check-sm-ice | sort > unused-sm-ice
$ cat unused-sm-ice
abiword-gnome:/usr/bin/AbiWord-2.4
brasero:/usr/bin/brasero
dasher:/usr/bin/dasher
dia-gnome:/usr/bin/dia-gnome
ekiga:/usr/bin/ekiga
epiphany-gecko:/usr/bin/epiphany-gecko
epiphany-webkit:/usr/bin/epiphany-webkit
evince:/usr/bin/evince
evolution:/usr/bin/evolution
evolution:/usr/lib/evolution/2.12/libeabutil.so.0.0.0
evolution:/usr/lib/evolution/2.12/libeconduit.so.0.0.0
evolution:/usr/lib/evolution/2.12/libecontacteditor.so.0.0.0
evolution:/usr/lib/evolution/2.12/libecontactlisteditor.so.0.0.0
evolution:/usr/lib/evolution/2.12/libefilterbar.so.0.0.0
evolution:/usr/lib/evolution/2.12/libemiscwidgets.so.0.0.0
evolution:/usr/lib/evolution/2.12/libeshell.so.0.0.0
evolution:/usr/lib/evolution/2.12/libetable.so.0.0.0
evolution:/usr/lib/evolution/2.12/libetext.so.0.0.0
evolution:/usr/lib/evolution/2.12/libetimezonedialog.so.0.0.0
evolution:/usr/lib/evolution/2.12/libeutil.so.0.0.0
evolution:/usr/lib/evolution/2.12/libevolution-a11y.so.0.0.0
evolution:/usr/lib/evolution/2.12/libevolution-addressbook-a11y.so.0.0.0
evolution:/usr/lib/evolution/2.12/libevolution-addressbook-importers.so.0.0.0
evolution:/usr/lib/evolution/2.12/libevolution-calendar-a11y.so.0.0.0
evolution:/usr/lib/evolution/2.12/libevolution-calendar-importers.so.0.0.0
evolution:/usr/lib/evolution/2.12/libevolution-mail-importers.so.0.0.0
evolution:/usr/lib/evolution/2.12/libevolution-widgets-a11y.so.0.0.0
evolution:/usr/lib/evolution/2.12/libfilter.so.0.0.0
evolution:/usr/lib/evolution/2.12/libmenus.so.0.0.0
fontforge:/usr/bin/fontforge
fontforge:/usr/bin/mensis
fontforge:/usr/lib/fontforge/libgdraw.so.3.0.1
fontforge:/usr/lib/fontforge/libgutils.so.1.0.0
gnomebaker:/usr/bin/gnomebaker
gnome-cups-manager:/usr/bin/gnome-cups-add
gnome-cups-manager:/usr/bin/gnome-cups-icon
gnome-cups-manager:/usr/bin/gnome-cups-manager
gnome-mag:/usr/bin/magnifier
gnome-pilot:/usr/bin/gnome-pilot-make-password
gnome-pilot:/usr/bin/gpilot-applet
gnome-pilot:/usr/bin/gpilotd
gnome-pilot:/usr/bin/gpilotd-control-applet
gnome-pilot:/usr/bin/gpilotd-session-wrapper
gnome-pilot:/usr/bin/gpilot-install-file
gnome-power-manager:/usr/bin/gnome-power-manager
gnome-power-manager:/usr/bin/gnome-power-preferences
gnome-power-manager:/usr/bin/gnome-power-statistics
gnome-screensaver:/usr/bin/gnome-screensaver
gnome-utils:/usr/bin/baobab
gnome-utils:/usr/bin/gfloppy
gnome-utils:/usr/bin/gnome-dictionary
gnome-utils:/usr/bin/gnome-screenshot
gnome-utils:/usr/bin/gnome-search-tool
gnome-utils:/usr/bin/gnome-system-log
gnome-volume-manager:/usr/bin/gnome-volume-properties
groff:/usr/bin/gxditview
gthumb:/usr/bin/gthumb
gtranslator:/usr/bin/gtranslator
imagemagick:/usr/bin/animate
imagemagick:/usr/bin/compare
imagemagick:/usr/bin/composite
imagemagick:/usr/bin/conjure
imagemagick:/usr/bin/convert
imagemagick:/usr/bin/display
imagemagick:/usr/bin/identify
imagemagick:/usr/bin/import
imagemagick:/usr/bin/mogrify
imagemagick:/usr/bin/montage
imagemagick:/usr/bin/stream
libatspi1.0-0:/usr/lib/libcspi.so.0.10.11
libatspi1.0-0:/usr/lib/libloginhelper.so.0.0.0
libatspi1.0-0:/usr/lib/libspi.so.0.10.11
libbonoboui2-0:/usr/lib/libbonoboui-2.so.0.0.0
libbonoboui2-dev:/usr/bin/bonobo-browser
libbonoboui2-dev:/usr/bin/test-moniker
libgnomecupsui1.0-1c2a:/usr/lib/libgnomecupsui-1.0.so.1.0.0
libgnome-media0:/usr/lib/libcddb-slave2.so.0.0.0
libgnome-media0:/usr/lib/libgnome-media-profiles.so.0.0.0
libgnomesu0:/usr/bin/gnomesu
libgnome-window-settings1:/usr/lib/libgnome-window-settings.so.1.0.0
libgtkglext1:/usr/lib/libgdkglext-x11-1.0.so.0.0.0
libgtkglext1:/usr/lib/libgtkglext-x11-1.0.so.0.0.0
libgtkhtml3.14-19:/usr/lib/libgtkhtml-3.14.so.19.1.0
libmagick10:/usr/lib/libMagick.so.10.0.9
libmagick++10:/usr/lib/libMagick++.so.10.0.9
libmagick10:/usr/lib/libWand.so.10.0.9
libplot2c2:/usr/lib/libplot.so.2.2.2
libplot2c2:/usr/lib/libplotter.so.2.2.2
libqt3-mt:/usr/lib/libqui.so.1.0.0
libslab0:/usr/lib/libslab.so.0.0.0
libstartup-notification0:/usr/lib/libstartup-notification-1.so.0.0.0
libvte9:/usr/lib/libvte.so.9.2.17
libxaw7:/usr/lib/libXaw7.so.7.0.0
libxmu6:/usr/lib/libXmu.so.6.2.0
libxtrap6:/usr/lib/libXTrap.so.6.4.0
nvclock:/usr/bin/nvclock
seahorse:/usr/lib/libseahorse.so.0.0.0
sound-juicer:/usr/bin/sound-juicer
stellarium:/usr/bin/stellarium
totem-gstreamer:/usr/bin/totem-gstreamer
totem-gstreamer:/usr/bin/totem-gstreamer-audio-preview
totem-gstreamer:/usr/bin/totem-gstreamer-video-indexer
totem-gstreamer:/usr/bin/totem-gstreamer-video-thumbnailer
totem-gstreamer:/usr/lib/nautilus/extensions-1.0/libtotem-properties-page.so.gstreamer
x11-apps:/usr/bin/oclock
x11-apps:/usr/bin/xbiff
x11-apps:/usr/bin/xcalc
x11-apps:/usr/bin/xclipboard
x11-apps:/usr/bin/xclock
x11-apps:/usr/bin/xconsole
x11-apps:/usr/bin/xcutsel
x11-apps:/usr/bin/xditview
x11-apps:/usr/bin/xedit
x11-apps:/usr/bin/xeyes
x11-apps:/usr/bin/xload
x11-apps:/usr/bin/xlogo
x11-apps:/usr/bin/xmag
x11-apps:/usr/bin/xman
x11-apps:/usr/bin/xmore
x11-utils:/usr/bin/appres
x11-utils:/usr/bin/editres
x11-utils:/usr/bin/listres
x11-utils:/usr/bin/viewres
x11-utils:/usr/bin/xfd
x11-utils:/usr/bin/xfontsel
x11-utils:/usr/bin/xmessage
x11-xkb-utils:/usr/bin/xkbvleds
x11-xkb-utils:/usr/bin/xkbwatch
x11-xserver-utils:/usr/bin/xstdcmap
x11-xserver-utils:/usr/bin/xtrapchar
x11-xserver-utils:/usr/bin/xtrapin
x11-xserver-utils:/usr/bin/xtrapinfo
x11-xserver-utils:/usr/bin/xtrapout
x11-xserver-utils:/usr/bin/xtrapproto
x11-xserver-utils:/usr/bin/xtrapreset
x11-xserver-utils:/usr/bin/xtrapstats
x11-xserver-utils:/usr/bin/xvidtune
xdmx-tools:/usr/bin/dmxwininfo
xdmx-tools:/usr/bin/xdmxconfig
xiterm+thai:/usr/bin/xiterm+thai
xterm:/usr/bin/xterm
---8<---
> After working with Neutron, I find this is caused by the
> AC_PATH_XTRA macro in configure.in, which, in addition to
> setting the usual CFLAGS and LIBS for X11 build, detects
> libSM and libICE and add them to the link flags, regardless of
> whether the are actually used or not. And there seems to be
> no other autoconf macro for this purpose to use.
>
> One possible fix is to switch to pkg-config and take
> advantage of the modularity of xorg 7. But its price is the
> loss of X11R6 support, which may still be in use in other
> Unix systems. But I don't think it's too expensive.
I've fixed this. The result is less memory usage, from 1.7M
to 388 KB.
> Another question is, how about other affected X apps? How
> would they do with these 2 unused linked libraries?
I find the cause varies from package to package.
For example, x11-utils and x11-apps use libXaw* and libXt
via pkg-config, which in turn depend on libSM and libICE
without using them.
Meanwhile, gnome-utils uses AC_PATH_XTRA, which always
forces libSM and libICE linkage.
I haven't checked others yet, though.
Regards,
--
Theppitak Karoonboonyanan
http://linux.thai.net/~thep/
Reply to: