Here it is again one of my informative blog posts, for future memento and for asking comments about this.
Yesterday I was talking yesterday with drizzt about
--as-needed having trouble on Gentoo/FreeBSD, I tried, and I’ve seen that on 2.17 it worked fine. So I thought with myself “Why don’t enable it?” and so I did..
The first package I merged was a KDE theme, and it didn’t find Qt. I tried another and again the same problem, so I decided looking at the problem, and here it is the description.
-pthread flag used to link against libpthread on Linux and FreeBSD, has a particular meaning on FreeBSD. Basically, if the result is an executable
libpthread.so is added to the NEEDED lines, but when generating a shared object, that is not added.
One might think of a GCC bug, either the Gentoo one, or in general. But actually, there’s a reason for that. There are more than one pthread implementation in FreeBSD: one can use
-lthr to use libthr threads rather than pthread. When using
-pthread option, no library is linked when creating a shared object, so that when one create a final executable, that might come out of a totally another package, the threading library can be chosen freely. Unfortunately, this entirely breaks when using
So, for now, I have to say that
--as-needed is not supposed to work on Gentoo/FreeBSD, until I can find a way to work this around. The easy part would be to use
-Wl,--no-as-needed -pthread -Wl,--as-needed as PTHREAD_LIBS, but I don’t think we ever planned on adding support for that anytime soon. Sigh.
Then there’s the other trouble, with the non-linked libraries in freebsd-lib due to the way they are built in standard FreeBSD (there aren’t the deps built at the time yet).
I suppose that adding support for
--as-needed on Gentoo/FreeBSD would be a major hassle, and now I understand why KDE decided not to enable it on FreeBSD by default.