Today I thought about how I can make my very own application to only link against those libraries that it really requires and not those it get provided by PKG-CONFIG.Problem-case:
When we use pkgconfig within our programs which of course makes sense, we also see that other libraries from other packages are being processed to our *_LIBS variables. So we end up in linking a lot of libraries to our application which we really do not need and which also causes (so I assume) a lot of overhead. After thinking for a while I looked some programs up by using:
readelf -d /usr/local/bin/gnome-terminal |grep NEEDED | wc -l
And saw that it was requiring over 52 libraries. I then recompiled gnome-terminal with
export CFLAGS = “-Os -s -Wl,–as-needed”
Pay attention to the –as-needed and the resulting binary required just 21 libraries afterwards instead of the 52 before because it only linked those really required to the final executable. I continued this with vte and saw that it required 29 libraries initially but after the –as-needed flag it went down to 7 libraries.
Now imagine this for the entire GNOME desktop or the entire KDE desktop and also package management systems which will reduce dependency tracking a lot. The problem with this method is that you surely don’t keep track of API compatibility but a good package management system will certainly make sure that the packages packed belong to a certain desktop version.